一 、工厂方法(Factory Method)模式
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、 工厂方法模式角色与结构
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
三、一个简单的实例
四、工厂方法模式与简单工厂模式
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
工厂方法模式退化后可以演变成简单工厂模式。
工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
二、 工厂方法模式角色与结构
抽象工厂(Creator)角色:是工厂方法模式的核心,与应用程序无关。任何在模式中创建的对象的工厂类必须实现这个接口。
具体工厂(Concrete Creator)角色:这是实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建产品对象。在上图中有两个这样的角色:BulbCreator与TubeCreator。
抽象产品(Product)角色:工厂方法模式所创建的对象的超类型,也就是产品对象的共同父类或共同拥有的接口。在上图中,这个角色是Light。
具体产品(Concrete Product)角色:这个角色实现了抽象产品角色所定义的接口。某具体产品有专门的具体工厂创建,它们之间往往一一对应。
三、一个简单的实例
// 产品 Plant接口 public interface Plant { } //具体产品PlantA,PlantB public class PlantA implements Plant { public PlantA () { System.out.println("create PlantA !"); } public void doSomething() { System.out.println(" PlantA do something ..."); } } public class PlantB implements Plant { public PlantB () { System.out.println("create PlantB !"); } public void doSomething() { System.out.println(" PlantB do something ..."); } } // 产品 Fruit接口 public interface Fruit { } //具体产品FruitA,FruitB public class FruitA implements Fruit { public FruitA() { System.out.println("create FruitA !"); } public void doSomething() { System.out.println(" FruitA do something ..."); } } public class FruitB implements Fruit { public FruitB() { System.out.println("create FruitB !"); } public void doSomething() { System.out.println(" FruitB do something ..."); } } // 抽象工厂方法 public interface AbstractFactory { public Plant createPlant(); public Fruit createFruit() ; } //具体工厂方法 public class FactoryA implements AbstractFactory { public Plant createPlant() { return new PlantA(); } public Fruit createFruit() { return new FruitA(); } } public class FactoryB implements AbstractFactory { public Plant createPlant() { return new PlantB(); } public Fruit createFruit() { return new FruitB(); } } |
四、工厂方法模式与简单工厂模式
工厂方法模式与简单工厂模式再结构上的不同不是很明显。工厂方法类的核心是一个抽象工厂类,而简单工厂模式把核心放在一个具体类上。
工厂方法模式之所以有一个别名叫多态性工厂模式是因为具体工厂类都有共同的接口,或者有共同的抽象父类。
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好的符合了"开放-封闭"原则。而简单工厂模式在添加新产品对象后不得不修改工厂方法,扩展性不好。
工厂方法模式退化后可以演变成简单工厂模式。
简单工厂结构图
简单工厂代码
//抽象代码
public interface IfangFa {
void run();
}
//具体产品Orange,Apple
public class Orange implements IfangFa {
public void run(){
System.out.println("吃橘子");
}
}
public class Apple implements IfangFa {
public void run(){
System.out.println("吃苹果");
}
}
//具体工厂方法
public class Factory {
public static IfangFa getIF(String a){
IfangFa f = null;
if(a.equals("orange")){
f = new Orange();
}else if(a.equals("chixiang")){
f =new Apple();
}
return f;
}
}
相关推荐
简单工厂模式是软件设计模式中的一种结构型模式,它提供了...然而,需要注意的是,如果产品类型过多,或者需要动态添加新产品,简单工厂模式可能会变得难以维护,此时可以考虑使用更复杂的工厂方法模式或抽象工厂模式。
- **简单工厂模式**:提供一个静态方法来创建对象,但不推荐用于复杂场景,因为它违反了开闭原则。 - **工厂方法模式**:定义一个创建对象的接口,但由子类决定要实例化的类,增加了灵活性。 - **抽象工厂模式**...
简单工厂模式:(后面可以用反射优化代码) 优点: 1.将生产和消费分离(解耦),即创建对象和使用对象的功能分离,便于管理 缺点: 1.扩展性弱,如果添加了新的产品,则需要修改工厂方法 ...
工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern) 2. 结构型模式 适配器模式(Adapter ...
Factory 工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品,只需向工厂请求即可。消 工厂模式 费者无须修改就可以接纳新产品。缺点是当产品修改时,工厂类也要做相应的修改。如:如 何创建及如何向客户端...
整个设计模式领域还很新,本书的四位作者也许已占据了这个领域造诣最深的专家中的半数,因而他们定义模式的方法可以作为后来者的榜样。如果要知道怎样恰当定义和描述设计模式,我们应该可以从他们那儿获得启发”--steve...
虽然简单工厂模式并非23种GOF(Gang of Four,四人组)设计模式中的一种,但它是一种简单实用的实现方法,可以看作是工厂方法模式的简化版本。 在简单工厂模式中,通常会有一个工厂类,它负责创建不同类型的对象...
3. **抽象工厂模式(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口,无需指定它们的具体类。 4. **建造者模式(Builder)**:将复杂对象的构建与它的表示分离,使得同样的构建过程可以创建...
史伟君在2019年9月29日分享的这个步骤,为普天视液晶监视器的用户提供了进入工厂模式的清晰指南。值得注意的是,进入工厂模式后,用户可以调整的参数可能包括亮度、对比度、色彩平衡、伽马校正、信号处理等,甚至...
抽象工厂模式提供一个接口用于创建相关或依赖对象的家族,而不需要明确指定具体类。它在Java中用于创建一系列相关或相互依赖的对象。 7. 门面模式(Facade Pattern) 门面模式提供了一个统一的接口,用来访问子...
信息流包括年、月、周、日四个层次的需求计划和生产计划,以及计划变动信息的快速传递。 2. **精确计划**:产品管理部通过提高销售预测、库存分析和历史数据分析能力,制定精确的多层级产品需求计划,为生产提供指导...
- **工厂方法模式(Factory Method)**:定义一个用于创建对象的接口,让子类决定实例化哪一个类。 - **备忘录模式(Memento)**:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,...
- **抽象工厂模式**:提供一个接口,用于创建一系列相关的或相互依赖的对象,而无需指定它们具体的类。 - **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 - **建造者模式**:将一个复杂对象的...
3. 抽象工厂模式(Abstract Factory):为一个产品族提供一个创建对象的接口,使得子类可以在不修改代码的情况下创建产品族的任何对象。 4. 建造者模式(Builder):将复杂对象的构建与它的表示分离,使得同样的...
- **实习时间**:2010年4月5日至2010年6月20日 - **实习地点**:软帝有限公司 #### 实习目的 - 进一步熟悉Java开发的相关知识和技术。 - 掌握Java开发的基本技术,包括面向对象编程。 - 通过实战项目积累丰富的Java...
伟创力工厂的一个案例表明,为了节省成本,他们采取了关闭工作桌上一半灯管的方法,这样每条生产线每个月可以节省101.46美元的电费。 ### 4. 原材料的选择与成本控制 - **原材料指定**:苹果通常会指定原材料供应...
3. **多层次计划**:包括年、月、周、日四个层次,以周计划为最高精度,日计划3日滚动,确保生产顺利进行。 **C. 成品采购与库存接口** 这部分未在提供的内容中详细阐述,但通常涉及电器公司向工厂下单,工厂根据...