zoukankan      html  css  js  c++  java
  • (@WhiteTaken)设计模式学习——抽象工厂模式

    抽象工厂模式,可以向客户端提供一个接口,而客户端不用指定具体的类型创建对象,却能够创建多个产品族(一类具有共性产品,如地域等)的对象。

    下面直接上代码。

    1.苹果需要实现水果的接口,而苹果可以有北方的苹果,也可以有南方的苹果,所以也可以抽象成一个父类。

    1 public interface Fruit {
    2     public void Get();
    3 }
    4 
    5 public abstract class Apple implements Fruit{
    6     public abstract void Get();
    7 }

    2.南北方的苹果均需要继承这个父类,并实现父类的中的get方法。

     1 public class NorthApple extends Apple {
     2     public void Get() {
     3         System.out.println("北方苹果");    
     4     }
     5 }
     6 
     7 public class SouthApple extends Apple {
     8     public void Get() {
     9         System.out.println("南方苹果");
    10     }
    11 }

    3.香蕉的做法与苹果类似,抽象的父类继承水果接口,假设南北方都有香蕉吧。

     1 public abstract class Banana implements Fruit {
     2     public abstract void Get() ;
     3 }
     4 
     5 public class SouthBanana extends Banana {
     6     public void Get() {
     7         System.out.println("南方香蕉");
     8     }
     9 }
    10 
    11 public class NorthBanana extends Banana {
    12     public void Get() {
    13         System.out.println("北方香蕉");
    14     }
    15 }

    4.这样创建的就都创建完成了。这时候我们考虑的问题,我们要想获得苹果的对象,或者获得香蕉的对象,应该有这样一个工厂去获得。但是苹果与香蕉是分南北的,所以我们需要南北工厂,这两个工厂就是“族”的概念。

    这时候可以抽象出水果工厂的接口,接口中的方法分别是获取苹果对象,香蕉对象。

    1 public interface FruitFactory {
    2     public Fruit getApple();
    3     public Fruit getBanana();
    4 }

    5.南北工厂需要实现这个接口。

     1 public class SouthFruitFactory implements FruitFactory {
     2     public Fruit getApple() {
     3         return new SouthApple();
     4     }
     5     public Fruit getBanana() {
     6         return new SouthBanana();
     7     }
     8 }
     9 
    10 public class NorthFruitFactory implements FruitFactory {
    11     public Fruit getApple() {
    12         return new NorthApple();
    13     }
    14     public Fruit getBanana() {
    15         return new NorthBanana();
    16     }
    17 }

    6.这样两个产品族就创建完成了,我们只需要在主客户端中创建南方的工厂,就可以通过调用getApple()方法,得到南方苹果的实例。其他亦然。

     1 public class MainClass {
     2     public static void main(String[] args) {
     3         FruitFactory factory=new NorthFruitFactory();   //获取北方水果工厂的实例
     4         Fruit apple=factory.getApple();                  //北方苹果
     5         Fruit banana=factory.getBanana();                //北方香蕉
     6         apple.Get();
     7         banana.Get();
     8         
     9         FruitFactory factory2=new SouthFruitFactory();   //获取南方水果工厂的实例
    10         Fruit apple2=factory2.getApple();               //南方苹果
    11         Fruit banana2=factory2.getBanana();              //南方香蕉
    12         apple2.Get();
    13         banana2.Get();    
    14     }
    15 }

    个人理解,这个抽象工厂模式,在主客户端调用的时候,只需要获取相应的工厂,就可以得到想要的对象(不用指定具体要获取的对象),实现相应的方法。这里与最开始抽象工厂的方法结合着理解就ok。

  • 相关阅读:
    笔记:HttpResponse类
    既生瑜何生亮,为何有了类还要有结构?
    dotnet 文件下载后文件名乱码
    SQL SERVER临时表的使用
    笔记:SQL SERVER 2005中的同步复制技术(转)
    .net 四种错误处理机制
    DotNET 长文章分页方法
    HTML标签过滤方案
    过滤查询条件LIKE里面的关键字符
    理解HTTP消息头
  • 原文地址:https://www.cnblogs.com/WhiteTaken/p/6380248.html
Copyright © 2011-2022 走看看