`
duolaaqian
  • 浏览: 14100 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

[初级]设计模式--工厂模式

阅读更多
/**
 * 所有工厂模式都是为了让对象的调用者和对象创建过程分离,简化调用端代码,便于维护
 * 简单地对象创建则不需要使用工厂模式
 */

/**
 * 简单工厂(静态工厂)
 * 
 * 	1、创建产品接口
 * 	2、创建工厂类
 * 	3、工厂类通过传入参数的不同返回不同的产品
 * 
 * 优点:
 * 	1、代码调用简单,类之间的关系也较简单
 * 缺点:
 * 	1、拓展性稍差,如果需要增加新的产品,则需要修改已有代码(工厂类),不符合开闭原则(可扩展、禁修改)
 */
public class SimpleFactroy {
	public static void main(String[] args) {
		ArsenalFactory.getArms("AK47").attack();
		ArsenalFactory.getArms("喀秋莎").attack();
		ArsenalFactory.getArms("如意金箍棒").attack();
	}
}

/**
 * 工厂类,通过该类获取产品实例
 */
class ArsenalFactory{
	public static IArm getArms(String name){
		if("AK47".equals(name)){
			return new AK47();
		}else if("喀秋莎".equals(name)){
			return new Katyusha();
		}else if("如意金箍棒".equals(name)){
			return new MonkeyKingBar();
		}else{
			return null;
		}
	}
}
/**
 * 产品接口
 */
interface IArm{
	public void attack();
}
/**
 * 以下为具体产品
 */
class AK47 implements IArm{
	@Override
	public void attack() {
		System.out.println("AK47 突突突");
	}
}
class Katyusha implements IArm{
	@Override
	public void attack() {
		System.out.println("喀秋莎 嗖嗖嗖");
	}
}
class MonkeyKingBar implements IArm{
	@Override
	public void attack() {
		System.out.println("妖怪 看棒");
	}
}

 

/**
 * 工厂方法
 * 
 * 	1、定义产品接口
 * 	2、定义工厂抽象类
 * 	3、通过工厂创建具体产品
 * 
 * 优点:
 * 	1、方便对产品进行更换
 * 	2、方便增加新的产品
 * 缺点:
 * 	1、产品多了类就会多 [一个产品=一个产品类+一个产品类工厂](类爆炸)
 * 	2、产品接口 修改后其他实现类都要改
 */
public class FactoryMethod {
	public static void main(String[] args) {
//		VehicleFactory v = new PlaneFactory();
		VehicleFactory v = new CarFactory();
		v.create().run();
	}
}
/**
 * 产品接口
 */
interface IMoveable{
	public void run();
}
/**
 * 工厂抽象类
 */
abstract class VehicleFactory{
	abstract IMoveable create();
}

/**
 * 以下为具体产品及相应工厂
 */
class Plane implements IMoveable{
	@Override
	public void run() {
		System.out.println("大飞机 呼呼呼");
	}
}
class PlaneFactory extends VehicleFactory{
	public IMoveable create(){
		return new Plane();
	}
}
class Car implements IMoveable{
	@Override
	public void run() {
		System.out.println("小汽车 嘀嘀嘀");
	}
}
class CarFactory extends VehicleFactory{
	public IMoveable create(){
		return new Car();
	}
}

 

抽象工厂start

/**
 * 抽象工厂类
 */
public abstract class AbstractFactory {
	public abstract Weapon createWeapon();
	public abstract Vehicle createVehicle();
	public abstract Food createFood();
}
/**
 * 抽象工厂对应的抽象产品类
 */
abstract class Weapon{
	public abstract void fire();
}
abstract class Vehicle{
	public abstract void run();
}
abstract class Food{
	public abstract void eat();
}

 

/**
 * 产品系列1
 */
public class DefaultFactory extends AbstractFactory{
	@Override
	public Weapon createWeapon() {
		return new AK47();
	}
	@Override
	public Vehicle createVehicle() {
		return new Tank();
	}
	@Override
	public Food createFood() {
		return new Beef();
	}
}

class AK47 extends Weapon{
	@Override
	public void fire() {
		System.out.println("AK47 嗒嗒嗒");
	}
}
class Tank extends Vehicle{
	@Override
	public void run() {
		System.out.println("坦克 咕隆隆");
	}
}
class Beef extends Food{
	@Override
	public void eat() {
		System.out.println("吃牛肉");
	}
}

 

/**
 * 产品系列2
 */
public class MagicFactory extends AbstractFactory{
	@Override
	public Weapon createWeapon() {
		return new MagicStick();
	}
	@Override
	public Vehicle createVehicle() {
		return new MagicBroom();
	}
	@Override
	public Food createFood() {
		return new MagicBread();
	}
}
class MagicStick extends Weapon{
	@Override
	public void fire() {
		System.out.println("魔法棒 变");
	}
}
class MagicBroom extends Vehicle{
	@Override
	public void run() {
		System.out.println("魔法扫帚 飞");
	}
}
class MagicBread extends Food{
	@Override
	public void eat() {
		System.out.println("魔法面包 呃");
	}
}

 

/**
 * 抽象工厂
 * 	主要解决 产品系列 的功能
 * 
 * 	1、定义 产品系列工厂 抽象类
 * 	2、定义每个产品的抽象类
 * 	3、定义具体产品、具体产品工厂
 * 
 * 	AbstractFactory --> 定义产品的标准(方法)
 * 	DefaultFactory、MagicFactory.... --> 实现具体的产品(方法)
 * 
 * 优点:
 * 	1、方便对产品系列进行增加、替换
 * 缺点:
 * 	1、新增产品的话,每个工厂实现都要改
 */
public class Client {
	public static void main(String[] args) {
//		AbstractFactory f = new DefaultFactory();
		AbstractFactory f = new MagicFactory();
		f.createWeapon().fire();
		f.createVehicle().run();
		f.createFood().eat();
	}
}

 抽象工厂end

分享到:
评论

相关推荐

    java设计模式-简单工厂模式示例

    尽管如此,简单工厂模式对于一些简单且产品种类较少的场景仍然非常适用,尤其是在学习设计模式的初级阶段,它是一个很好的起点。通过深入理解这个模式,可以帮助开发者更好地理解和运用其他更复杂的设计模式,如工厂...

    设计模式-Java语言中的应用(pdf)

    《设计模式——Java语言中的应用》是一本专为Java开发者深入理解面向对象设计而编写的经典书籍。...无论是初级开发者还是经验丰富的程序员,都应该不断探索和实践设计模式,以提升自己的专业技能。

    JAVA设计模式-设计模式公司出品

    初级程序员可以学习设计模式的基本概念和应用,高级程序员能够从书中掌握更多高级技巧,而系统分析师可以通过设计模式来解决项目中遇到的复杂问题。 总体而言,设计模式是软件工程领域的宝贵财富,而《JAVA设计模式...

    工厂模式-简单工厂(设计模式的入门级模式)

    简单工厂模式作为设计模式的入门级模式,适合初级学习者理解和实践。在简单工厂模式中,一个工厂类负责创建对象,而客户端代码则不再直接创建对象,而是通过调用工厂类的静态方法来获取所需的实例。 在Java中,我们...

    研磨设计模式-part2

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part4

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    研磨设计模式-part3

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书...综上所述,本书不仅是一本关于设计模式的入门书,也是对设计模式应用的深入探讨,无论是对于初级开发者、高级程序员,还是系统分析师,都能从中获得价值。

    研磨设计模式(完整带书签).part2.pdf

    《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。也可以作为高效学生深入学习设计模式的参考读物! 第1章 设计模式基础 第2章 简单工厂 第3章 外观模式 第4章 ...

    52-简单工厂工厂方法模式抽象工厂1

    简单工厂模式是一种较为初级的工厂设计模式,它通过一个中心工厂类来负责创建对象,这个工厂类通常包含一个静态方法,根据传入的参数或条件来决定创建哪个具体类的实例。简单工厂模式的优点在于客户端无需关注对象的...

    java设计模式的 3本书 1 ppt

    设计模式是软件工程中的一种最佳实践,它提供了一套经过时间考验的解决方案,用来解决在设计可复用、可维护的...无论是初级开发者还是经验丰富的工程师,都应该不断探索和熟练运用设计模式,以实现更高质量的软件开发。

    JS设计模式与开发实践

    - **初级开发者**:可以学习JavaScript的基础知识和一些简单的设计模式。 - **中级开发者**:可以通过学习设计模式进阶,了解更高级的设计模式和技术细节。 - **高级开发者**:可以深入了解设计模式的应用,以及如何...

    java23种设计模式详细讲解

    创建型模式主要关注对象的创建,提供了灵活创建对象的方法,包括单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。 2. 结构型模式 结构型模式涉及如何组合类和对象以获得更大的结构。包括适配器模式、...

    研磨设计模式PDF

    1. 创建型模式(Creational Patterns):主要处理对象的创建,如单例模式(Singleton)、工厂模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。...

    C/C++设计模式基础教程

    - **抽象工厂模式**:提供一个创建一系列相关或相互依赖对象的接口,无需指定具体类。 - **建造者模式**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **原型模式**:通过复制...

    java开发设计模式

    对于不同级别的程序员,设计模式能够提供不同程度的帮助和指导,从初级程序员的基础编程技能提升,到高级程序员的系统设计和架构,再到系统分析师的项目问题解决,设计模式都能发挥关键作用。 在应用设计模式时,...

Global site tag (gtag.js) - Google Analytics