设计模式(二)

工厂方法模式

1、模式结构

工厂方法模式组成部分:

①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;

②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;

③抽象产品:定义的产品的属性和功能;

④具体产品:实现了抽象产品的接口,由具体工厂负责创建。

工厂方法模式的主要优点有:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;
  • 每个具体工厂只负责一个对应产品的生产。

工厂模式的实现示例代码:

package newcoder.FactoryDesignModel;
interface abstractFactory{ // 抽象工厂
    public abstractProduct newProduct();
}
interface abstractProduct{ // 抽象产品
    public void show();
}
class concreteProduct1 implements abstractProduct{
    // 具体产品
    public concreteProduct1(){
        System.out.println("concreteProduct1被创建");
    }
    public void show(){
        System.out.println("展示产品1");
    }
}
class concreteProduct2 implements abstractProduct{
    // 具体产品
    public concreteProduct2(){
        System.out.println("concreteProduct2被创建");
    }
    public void show(){
        System.out.println("展示产品2");
    }
}
class concreteFactory1 implements abstractFactory{
    // 具体工厂
    public abstractProduct newProduct(){
        return new concreteProduct1();
    }
}
class concreteFactory2 implements abstractFactory{
    // 具体工厂
    public abstractProduct newProduct(){
        return new concreteProduct2();
    }
}
public class FactoryTest {
    public static void main(String args[]){
        abstractFactory f1 = new concreteFactory1();
        abstractProduct a = f1.newProduct();
        a.show();
        abstractFactory f2 = new concreteFactory2();
        abstractProduct b = f2.newProduct();
        b.show();
    }
}

抽象工厂方法

工厂方法模式中,只考虑生产同级的产品,抽象工厂模式将考虑多等级产品的生产。在一个工厂中,不仅能够生产洗衣机,也可以生产空调。

1、模式的结构

①抽象工厂:提供创建产品的接口,调用者通过访问具体工厂的工厂方法newProduct()来完成产品的创建;

②具体工厂:实现抽象工厂的抽象方法,完成具体产品的创建;

③抽象产品:定义的产品的属性和功能;

④具体产品:实现了抽象产品的接口,由具体工厂负责创建。同具体工厂之间的关系是多对一。

 抽象工厂模式实现的示例代码:

package newcoder.FactoryDesignModel;
interface ABstractFactory{
    public electrictProduct newelectrictProduct();
    public smartProduct newsmartProduct();
}
interface electrictProduct{
    public void show1();
}
interface smartProduct{
    public void show2();
}
class computer implements smartProduct{
    public computer(){
        System.out.println("电脑被生产了");
    }
    public void show2(){
        System.out.println("展示电脑");
    }
}
class phone implements smartProduct{
    public phone(){
        System.out.println("手机被生产了");
    }
    public void show2(){
        System.out.println("展示手机");
    }
}
class airCondition implements electrictProduct{
    public airCondition(){
        System.out.println("空调被生产了");
    }
    public void show1(){
        System.out.println("展示空调");
    }
}
class cleaMechanic implements electrictProduct{
    public cleaMechanic(){
        System.out.println("洗衣机被生产了");
    }
    public void show1(){
        System.out.println("展示洗衣机");
    }
}
class haierFactory implements ABstractFactory{
    public electrictProduct newelectrictProduct(){
        return new airCondition();
    }
    public smartProduct newsmartProduct(){
        return new phone();
    }

}
class geliFactory implements ABstractFactory{
    public electrictProduct newelectrictProduct(){
        return new cleaMechanic();
    }
    public smartProduct newsmartProduct(){
        return new computer();
    }
}
public class Test {
    public static void main(String args[]){
        ABstractFactory f1 = new haierFactory();
        ABstractFactory f2 = new geliFactory();
        electrictProduct a = f1.newelectrictProduct();
        smartProduct b = f1.newsmartProduct();
        electrictProduct c = f2.newelectrictProduct();
        smartProduct d = f2.newsmartProduct();
    }
}
原文地址:https://www.cnblogs.com/xxyxt/p/11466557.html