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

对于这个抽象工厂的相应的代码实现

/**
 * 功能:抽象工厂模式的作用
           适用性
        1.一个系统要独立于它的产品的创建、组合和表示时。
        2.一个系统要由多个产品系列中的一个来配置时。
        3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
        4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
 * 时间:2016年2月11日22:18
 * 作者:cutter_point
 */
package com.shejimoshi.create.AbstractFactory;

public interface IFactory
{
    //这个工厂接口用来创建用户和部门
    IUser createUser();

    IDepartment createDepartment();
}
 1 /**
 2  * 功能:抽象工厂模式的作用
 3            适用性
 4         1.一个系统要独立于它的产品的创建、组合和表示时。
 5         2.一个系统要由多个产品系列中的一个来配置时。
 6         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
 7         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
 8  * 时间:2016年2月11日22:21
 9  * 作者:cutter_point
10  */
11 package com.shejimoshi.create.AbstractFactory;
12
13 public interface IUser
14 {
15     //插入用户和获取用户数据
16     void Insert(User user);
17     User GetUser(int id);
18 }
 1 /**
 2  * 功能:抽象工厂模式的作用
 3            适用性
 4         1.一个系统要独立于它的产品的创建、组合和表示时。
 5         2.一个系统要由多个产品系列中的一个来配置时。
 6         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
 7         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
 8  * 时间:2016年2月11日22:21
 9  * 作者:cutter_point
10  */
11 package com.shejimoshi.create.AbstractFactory;
12
13 public interface IDepartment
14 {
15     void insert(Department department);
16
17     Department getDepartment(int id);
18 }

对于IFactory派生的

 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:40:47
12  * 作者:cutter_point
13  */
14 public class AccessFactory implements IFactory
15 {
16
17     @Override
18     public IUser createUser()
19     {
20         return new AccessUser();
21     }
22
23     @Override
24     public IDepartment createDepartment()
25     {
26         // TODO Auto-generated method stub
27         return new AccessDepartment();
28     }
29
30 }
 1 /**
 2  * 功能:抽象工厂模式的作用
 3            适用性
 4         1.一个系统要独立于它的产品的创建、组合和表示时。
 5         2.一个系统要由多个产品系列中的一个来配置时。
 6         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
 7         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
 8  * 时间:2016年2月11日22:21
 9  * 作者:cutter_point
10  */
11 package com.shejimoshi.create.AbstractFactory;
12
13 public class SqlServerFactory implements IFactory
14 {
15
16     @Override
17     public IUser createUser()
18     {
19         // TODO Auto-generated method stub
20         return new SqlServerUser();
21     }
22
23     @Override
24     public IDepartment createDepartment()
25     {
26         // TODO Auto-generated method stub
27         return new SqlServerDepartment();
28     }
29
30 }

IUser派生

 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:32:19
12  * 作者:cutter_point
13  */
14 public class SqlServerUser implements IUser
15 {
16
17     @Override
18     public void Insert(User user)
19     {
20         System.out.println("插入一条用户数据到sql:" + user.getId() + ":" + user.getName());
21     }
22
23     @Override
24     public User GetUser(int id)
25     {
26         System.out.println("获取一条用户数据根据sql的id:" + id);
27         return null;
28     }
29
30 }
 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:41:54
12  * 作者:cutter_point
13  */
14 public class AccessUser implements IUser
15 {
16
17     @Override
18     public void Insert(User user)
19     {
20         System.out.println("插入一个用户数据到access");
21     }
22
23     @Override
24     public User GetUser(int id)
25     {
26         System.out.println("从access获取一条数据");
27         return null;
28     }
29
30 }

IDepartment派生的子类

 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:38:48
12  * 作者:cutter_point
13  */
14 public class SqlServerDepartment implements IDepartment
15 {
16
17     @Override
18     public void insert(Department department)
19     {
20         System.out.println("新增加一个部门");
21     }
22
23     @Override
24     public Department getDepartment(int id)
25     {
26         System.out.println("获取一个部门数据");
27         return null;
28     }
29
30 }
 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:45:54
12  * 作者:cutter_point
13  */
14 public class AccessDepartment implements IDepartment
15 {
16
17     @Override
18     public void insert(Department department)
19     {
20         System.out.println("吧新增的部门添加到access数据库中");
21     }
22
23     @Override
24     public Department getDepartment(int id)
25     {
26         System.out.println("从access数据库获取department信息");
27         return null;
28     }
29
30 }

最后我们写一段测试代码:

 1 package com.shejimoshi.create.AbstractFactory;
 2
 3
 4 /**
 5  * 功能:抽象工厂模式的作用
 6            适用性
 7         1.一个系统要独立于它的产品的创建、组合和表示时。
 8         2.一个系统要由多个产品系列中的一个来配置时。
 9         3.当你要强调一系列相关的产品对象的设计以便进行联合使用时。
10         4.当你提供一个产品类库,而只想显示它们的接口而不是实现时。
11  * 时间:2016年2月11日下午10:47:37
12  * 作者:cutter_point
13  */
14 public class Test
15 {
16     public static void abstractfactorymethod(IFactory factory)
17     {
18         User user = new User();
19         user.setId(1); user.setName("cutter_point");
20         Department department = new Department();
21         department.setId(1); department.setName("this is China");
22
23         IUser iu = factory.createUser();
24         iu.Insert(user);
25         iu.GetUser(1);
26
27         IDepartment idp = factory.createDepartment();
28         idp.insert(department);
29         idp.getDepartment(1);
30     }
31
32     public static void main(String[] args)
33     {
34         SqlServerFactory sqlf = new SqlServerFactory();
35         AccessFactory accf = new AccessFactory();
36
37         abstractfactorymethod(sqlf);
38         abstractfactorymethod(accf);
39
40     }
41
42 }

运行结果:

插入一条用户数据到sql:1:cutter_point
获取一条用户数据根据sql的id:1
新增加一个部门
获取一个部门数据
插入一个用户数据到access
从access获取一条数据
吧新增的部门添加到access数据库中
从access数据库获取department信息
时间: 2024-12-28 00:56:36

【设计模式】1、抽象工厂模式的相关文章

设计模式之抽象工厂模式

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

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

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

大话设计模式_抽象工厂模式(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)【创建型】

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

设计模式——4.抽象工厂模式

1. 模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构 :产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体

设计模式之抽象工厂模式(c++)

问题描述 假设我们要开发一款游戏, 当然为了吸引更多的人玩, 游戏难度不能太大(让大家都没有信心了,估计游戏也就没有前途了),但是也不能太简单(没有挑战性也不符合玩家的心理).于是我们就可以采用这样一种处理策略: 为游戏设立等级,初级.中级.高级甚至有BT 级. 假设也是过关的游戏, 每个关卡都有一些怪物( monster) 守着, 玩家要把这些怪物干掉才可以过关. 作为开发者, 我们就不得不创建怪物的类, 然后初级怪物. 中级怪物等都继承自怪物类(当然不同种类的则需要另创建类,但是模式相同).

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

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式. 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类.每个生成的工厂都能按照工厂模式提供对象. 介绍 意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 主要解决:主要解决接口选择的问题. 何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品

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

本文继续介绍23种设计模式系列之抽象工厂模式. 前面已经介绍过简单工厂模式和工厂方法模式,这里继续介绍第三种工厂模式-抽象工厂模式,还是以汽车的制造为例. 例子背景: 随着客户的要求越来越高,宝马车需要不同配置的空调和发动机等配件.于是这个工厂开始生产空调和发动机,用来组装汽车.这时候工厂有两个系列的产品:空调和发动机.宝马320系列配置A型号空调和A型号发动机,宝马230系列配置B型号空调和B型号发动机. 概念: 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象.比如