(@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。

时间: 2024-10-25 04:49:29

(@WhiteTaken)设计模式学习——抽象工厂模式的相关文章

设计模式学习02—工厂模式

1.动机与定义 我们在程序中使用一个对象时,需要new一下,如果需要设置其他值就再初始化一下.比如我要使用一个按钮,手动new一个矩形按钮,然后初始化一些值,如显示文字,背景色等. // 矩形按钮 IButton btn = new RecButton(); // 初始化其他值 btn.setText("提交"); btn.setBackgroundColor("#00aaff"); // 其他初始化省略 // 圆形按钮 IButton btn2 = new Rou

C#设计模式之三抽象工厂模式(AbstractFactory)【创建型】

原文:C#设计模式之三抽象工厂模式(AbstractFactory)[创建型] 一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂

设计模式之抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 最大的好处便是易于交换产品系列,由于具体工厂类,在一个应用中只需在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需改变具体工厂即可使用不同的产品配置. 他使具体创建实例的过程与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离. 下面的代码还使用了反射与XML. 代码如下: using System; using System.Collections.Ge

设计模式之抽象工厂模式20170803

创建型设计模式之抽象工厂模式: 一.含义 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类. 具体来说, 为一组具有相同约束(属性)的对象,提供一个接口,这个接口下有不同的实现,每个实现类对应一种类型的约束(一种具体的属性),同时提供该类型的约束(属性)下所有对象的创建方法 二.代码说明 1.主要有两个角色 1)一组互相影响的产品线(对象),也叫做产品族 2)抽象工厂类及其实现类 抽象工厂类:在N个产品族中,在抽象工厂类中就应该有N个创建方法 实现类:具体实现类是产品族的具体

设计模式【抽象工厂模式】

在学习抽象工厂模式之间,我们先了解两个重要概念:产品族与产品等级.产品族,是指不同产品等级结构中,功能相关联的产品组成的家族.本文以电脑的组装为例,AMD主板.CPU组成一个家族,Intel主板.CPU组成一个家族.而这两个家族都来自两个产品级别:主板.CPU.主板与CPU对应的就是产品等级. 抽象工厂模式是对象的创建模式,它是工厂方法模式的进一步推广.关于工厂方法模式,可以参看:http://blog.csdn.net/mahoking/article/details/39505569.抽象工

大话设计模式_抽象工厂模式(Java代码)

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类. 简单描述:有多种抽象产品,并且每种抽象产品都有多个具体产品.一个抽象工厂,提供多个具体工厂,每个工厂则提供不同种类的具体产品. 大话设计模式中的截图: 例子代码: AbstractProductA类: 1 package com.longsheng.abstractfactory; 2 3 public abstract class AbstractProductA { 4 5 public abstract v

设计模式三—抽象工厂模式

设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是园丁2的杰作 1.Fruit.java public interface Fruit { /* * 生长 * 收获 * 栽种 */ public void grow(); public void harvest(); public void plant(); } 2.Apple.java publi

设计模式之抽象工厂模式(Abstract Factory)

1.定义 抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类. 2.类图 由于类太多就不上源码了~ 最佳实践: 在一个应用中,需要在三个不同平台(Windows.Linux.Android)上运行,通过抽象工厂模式屏蔽掉操作系统对应的影响三个不同操作系统上的软件功能.应用逻辑.UI都应该是非常类似的,唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息. 设计模式之抽象工厂模式(Abstract Factory)

C#设计模式之四抽象工厂模式(AbstractFactory)【创建型】

一.引言 写了3篇有关设计模式的文章了,大家有了些反馈,说能从中学到一些东西,我感到很欣慰,那就继续努力.今天我要写第四个模式了,该模式叫抽象工厂.上一篇文章我们讲了[工厂方法]模式,它是为了解决[简单工厂]模式所面对的问题,它的问题就是:如果我们增加新的产品,工厂类的方法就要修改本身的代码,增加产品越多,其逻辑越复杂,同时这样的修改也是不符合[开放关闭原则OCP],对修改代码关闭,对增加代码开放.为了解决[简单工厂]的问题,我们引出了[工厂方法]模式,通过子类化工厂类,解决了工厂类责任的划分,