一(3)抽象工厂模式&&简单工厂+反射改进抽象工厂

1 抽象工厂?

  抽象工厂用在既有产品树,又有产品族的场合。

    产品树:奔驰旗下的跑车和商务车构成产品树
    产品族:奔驰旗下的跑车与奥迪旗下的跑车构成产品族。
/*
缺点:此时如果需要增加一个红旗厂家的车,需要改的地方很多。
1 定义红旗抽象类,具体类;
2 Factory接口增加生产红旗的工厂;
3 跑车工厂和商务车工厂都需要实现相应的生产红旗的接口。
*/
/*
 优点:当需要使用不同产品时,只需要改一行代码 Factory factory = new SprotCarFactory();,即初始化不同的工厂,就可以调用工厂中的不同方法了。
*/

package com.biao.factory.abstractfactory;

public class AbstractFactoryDemo {
    public static void main(String[] args) {
        Factory factory = new SprotCarFactory();
        AudiCar audiCar = factory.createAudiCar();
        audiCar.drive();

        Factory bussinessCarfactory = new BusinessCarFactory();
        BenzCar benzCar = bussinessCarfactory.createBenzCar();
        benzCar.drive();
    }
}

abstract class BenzCar{
    abstract void drive();
}

class BenzSportCar extends BenzCar{
    @Override
    void drive() {
        System.out.println("奔驰旗下的跑车");
    }
}

class BenzBusinessCar extends BenzCar{
    @Override
    void drive() {
        System.out.println("奔驰旗下的商务车");
    }
}

abstract class AudiCar{
    abstract void drive();
}

class AudiSportCar extends AudiCar{
    @Override
    void drive() {
        System.out.println("奥迪旗下的跑车");
    }
}

class AudiBusinessCar extends AudiCar{
    @Override
    void drive() {
        System.out.println("奥迪旗下的商务车");
    }
}

interface Factory{
    BenzCar createBenzCar();
    AudiCar createAudiCar();
}

class SprotCarFactory implements Factory{

    @Override
    public BenzCar createBenzCar() {
        // TODO Auto-generated method stub
        return new BenzSportCar();
    }

    @Override
    public AudiCar createAudiCar() {
        // TODO Auto-generated method stub
        return new AudiSportCar();
    }

}

class BusinessCarFactory implements Factory{

    @Override
    public BenzCar createBenzCar() {
        // TODO Auto-generated method stub
        return new BenzBusinessCar();
    }

    @Override
    public AudiCar createAudiCar() {
        // TODO Auto-generated method stub
        return new AudiBusinessCar();
    }

}

2 代码改进?

package com.biao.factory.abstractfactory.improment;
/*
 * 改进以后,如果要加入红旗系列的车,需要做的:
1 定义红旗抽象类,具体类;
2 Factory接口增加一个生产红旗车的方法。
 */

public class ReflactAddASimpleFactory {
    public static void main(String[] args) {
        try {
            AudiCar createAudiCar = Factory.createAudiCar("com.biao.factory.abstractfactory.improment.AudiSportCar");
            BenzCar createBenzCar = Factory.createBenzCar("com.biao.factory.abstractfactory.improment.BenzBusinessCar");
            createBenzCar.drive();
            createAudiCar.drive();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

abstract class BenzCar{
    abstract void drive();
}

class BenzSportCar extends BenzCar{
    @Override
    void drive() {
        System.out.println("奔驰旗下的跑车");
    }
}

class BenzBusinessCar extends BenzCar{
    @Override
    void drive() {
        System.out.println("奔驰旗下的商务车");
    }
}

abstract class AudiCar{
    abstract void drive();
}

class AudiSportCar extends AudiCar{
    @Override
    void drive() {
        System.out.println("奥迪旗下的跑车");
    }
}

class AudiBusinessCar extends AudiCar{
    @Override
    void drive() {
        System.out.println("奥迪旗下的商务车");
    }
}
/*用简单工厂配合反射  替代抽象工厂*/
class Factory{
    public static AudiCar createAudiCar(String name) throws Exception{
        return (AudiCar)Class.forName(name).newInstance();
    }

    public static BenzCar createBenzCar(String name) throws Exception{
        return (BenzCar) Class.forName(name).newInstance();
    }
}
时间: 2024-08-28 00:05:10

一(3)抽象工厂模式&&简单工厂+反射改进抽象工厂的相关文章

【iOS开发系列】用简单工厂模式理解OC反射机制

// 在iOS开发中,简单工厂模式使用得并不多.但是.我认为这是OC反射机制很好的一个例子, // 所以本文将以计算器为例,讲解简单工厂模式和OC的反射机制. // [简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类( // 这些产品类继承自一个父类或接口)的实例.该模式中包含的角色及其职责:工厂角色.抽 // 象产品角色.具体产品角色] // --百度百科 简单工厂模式 // 上面这句话可能不怎么好理解,我在网上找到了一个例子,可能例子本身不能完全解释这个 // 设

工厂模式,简单工厂模式,抽象工厂模式三者有什么区别

工厂模式,也叫做说虚构造器,在简单工厂中间插入了一个具体产品工厂,这个工厂知道产品构造时候的具体细节,而简单工厂模式的产品具体构造细节是在一个个if/else分支,或者在switch/case分支里面的.工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在了具体工厂类里面.在以后扩展产品的时候方便很多,只需要添加一个工厂类,一个产品类,就能方便的添加产品,而不需要修改原有的代码.而在简单工厂中,如果要增加一个产品,则需要修改工厂类,增加if/else分支,或者增加一个case

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

工厂模式——简单工厂模式

工厂模式分三类:简单工厂模式.工厂方法模式.抽象工厂模式. 首先介绍比较简单一种工厂模式——简单工厂模式. 我们以计算器作为一个例子来说明工厂模式到底是什么.作为一个几年前大一从C语言起步的初级程序员,到现在写代码的思维还是停留在结构化编程,虽然Java学了有几年了,总是说面向对象面向对象.但是让实现一个计算器的程序,估计大部分人都会以C语言式的结构化编程来写,几个if语句或者一个switch来搞定.我也同样不例外,为了提高自己的编程水平,所以一点点开始学设计模式.其实在很多开源代码里也有很多经

工厂模式简单例子

工厂模式: 1 package factorymode; 2 /** 3 * 工厂模式简单例子 4 * @author Administrator 5 * 6 */ 7 public class FactoryDemo { 8 9 public static void main(String[] args) { 10 IFruit fruit = Factory.getFrit("橘子"); 11 if(fruit != null) { 12 System.out.println(fr

详解设计模式之工厂模式(简单工厂+工厂方法+抽象工厂)

园子里关于23种设计模式的博文已经可以说是成千上万.车载斗量.屯街塞巷.不计其数.数不胜数.摩肩接踵.汗牛充栋.车水马龙.门庭若市.琳琅满目直至让人眼花缭乱了.在这样的大环境下之所以来写设计模式类的博文,并不是像一些"非主流"的爱情观那样"宁缺毋滥". 只是其一呢,因为相当于给自己做一个总结,加深一下自己这方面的认识,因为掌握了和把它写出来我感觉后者还可以对技能有一个提升,其二呢是因为最近公司有一个内部的training需要讲设计模式. v写在前面 在这里呢,需要向

总结工厂模式---简单工厂、工厂方法、抽象工厂

简单工厂 首先,我们先看一个简单工厂的例子: #coding=utf-8 class Mercedes(object): """梅赛德斯 """ def __repr__(self): return "Mercedes-Benz" class BMW(object): """宝马 """ def __repr__(self): return "BMW&quo

设计模式之工厂模式(简单工厂,工厂方法,抽象工厂)

设计模式6大原则:1.开闭原则:对拓展开放,对修改关闭2.单一职责原则:一个类只复杂一项职责3.里氏原则:子类可以扩展父类的功能,但不改变父类原有的功能4.依赖倒置原则:面向接口编程5.接口隔离原则:设计接口功能尽量细粒度,最小功能单元6.迪米特法则:降低耦合度(局部变量中,不要引入新的类) 这里对工厂模式做一个学习记录 这里用简单计算器来举例. 很简单,我们需要3个输入: a1 代表第一个数字 a2 代表第二数字 operator 代表运算符 这三个参数输入后得到一个输出result 1.平时

设计模式之工厂模式-简单工厂(02)

设计模式分创建型.行为型.结构型: 工厂模式属于创建型模式,分(1)简单工厂(静态工厂)(2)工厂方法(3)抽象工厂,下面分别通过代码来介绍(本篇文章北风网的视频看后写的): (一)简单工厂 简单工厂描述:通过专门定义的一个类来创建其他类的实例,被创建的实例通常都具有共同的父类: 简单工厂的角色及其职责:(1)工厂角色[creator]:该模式的核心,负责创建所有实例的内部逻辑,工厂类可以被外界直接调用,创建所需要的产品实例(2)抽象角色[Product]:简单工厂模式 所创建的所有对象的父类,