• 创建型模式抽象工厂


    1.1.2抽象工厂


    提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

     适用性

     
        1.一个系统要独立于它的产品的创建、组合和表示时。
     
        2.一个系统要由多个产品系列中的一个来配置时。
     
        3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
     
        4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
                           

     参与者

     
        1.AbstractFactory
          声明一个创建抽象产品对象的操作接口。
     
        2.ConcreteFactory
          实现创建具体产品对象的操作。
     
        3.AbstractProduct
          为一类产品对象声明一个接口。
     
        4.ConcreteProduct
          定义一个将被相应的具体工厂创建的产品对象。
          实现AbstractProduct接口。
     
        5.Client
          仅使用由AbstractFactory和AbstractProduct类声明的接口

     类图

     例子

    AbstractFactory

    public interface IAnimalFactory {
         ICat createCat();
         IDog createDog();
    }
     

    ConcreteFactory

    public class BlackAnimalFactory implements IAnimalFactory {
         public ICat createCat() {
            return new BlackCat();
        }
         public IDog createDog() {
            return new BlackDog();
        }
     }
     public class WhiteAnimalFactory implements IAnimalFactory {
         public ICat createCat() {
            return new WhiteCat();
        }
         public IDog createDog() {
            return new WhiteDog();
        }
     }
     

    AbstractProduct

    public interface ICat {
         void eat();
    }
     public interface IDog {
         void eat();
    }
     

    ConcreteProduct

    public class BlackCat implements ICat {
         public void eat() {
            System.out.println("The black cat is eating!");
        }
     }
     public class WhiteCat implements ICat {
         public void eat() {
            System.out.println("The white cat is eating!");
        }
     }
     public class BlackDog implements IDog {
         public void eat() {
            System.out.println("The black dog is eating");
        }
     }
     public class WhiteDog implements IDog {
         public void eat() {
            System.out.println("The white dog is eating!");
        }
     }
     

    Client

    public static void main(String[] args) {
        IAnimalFactory blackAnimalFactory = new BlackAnimalFactory();
        ICat blackCat = blackAnimalFactory.createCat();    
        blackCat.eat(); IDog blackDog
    = blackAnimalFactory.createDog();
        blackDog.eat();
    IAnimalFactory whiteAnimalFactory
    = new WhiteAnimalFactory(); ICat whiteCat = whiteAnimalFactory.createCat();
        whiteCat.eat(); IDog whiteDog
    = whiteAnimalFactory.createDog();
        whiteDog.eat(); }
     

    result

     
    The black cat is eating!
    The black dog is eating!
    The white cat is eating!
    The white dog is eating!
  • 相关阅读:
    Javascript 获得数组中相同或不同的数组元素
    JS 获取(期号、当前日期、本周第一天、最后一天及当前月第一、最后天函数)
    Intellij IDEA2020.2.3最新激活码激活破解方法(2020.11.26)
    【jQuery 区别】.click()和$(document).on("click","指定的元素",function(){});的区别
    pytorch repeat 和 expand 函数的使用场景,区别
    python小技巧
    提高GPU利用率
    pyinstaller 打包文件(包括使用管理员模式)
    frp 开机自启动
    AUC指标深度理解
  • 原文地址:https://www.cnblogs.com/aloe/p/2650452.html
Copyright © 2020-2023  润新知