每天一个设计模式-1 简单工厂

每天一个设计模式-1  简单工厂

1.简单工厂的定义

提供一个创建对象实例的功能,而无须关心其具体实现(核心)。

虽然不能让模块外部知道模块内部的具体实现,但模块内部是可以知道具体实现类的。干脆在模块内部建一个类,用这个类来创建接口,然后把创建号的接口返回给客户端;这样,外部应用就只需要根据这个类来获取相应的接口对象,通过这个接口对象就可以操作接口定义的方法了。显然,这个类就像一个工厂专门用来生成(生产)需要的接口对象。

2.简单的例子

说明:

代码:

Api:接口,wear是一个公有方法。

public interface Api {

    public void wear();

}

Api

impl1:男生穿男士衣服的实现wear。

public class Impl1 implements Api {

    public Impl1(){

    }

    public void finalize() throws Throwable {

    }

    public void wear(){
        System.out.println("男生穿男士衣服");
    }

}

Impl1

impl2:女生穿女士衣服的实现wear。

public class Impl2 implements Api {

    public Impl2(){

    }

    public void finalize() throws Throwable {

    }

    public void wear(){
        System.out.println("女士穿女士衣服");
    }
}

Impl2

Factory:工厂类,通过选择产生合适接口对象。

public class Factory {

    public Factory(){

    }

    public void finalize() throws Throwable {

    }

    /**
     *
     * @param sex
     */
    public static Api GetInstance(String sex){
        if(sex=="男"){
            return new Impl1();
        }else{
            return new Impl2();
        }
    }
}

Factory

Client:用户类

public class Client {

    public static Api m_Api;

    public Client(){

    }

    public void finalize() throws Throwable {

    }

    /**
     *
     * @param args
     */
    public static void main(String[] args){
        System.out.println("男生");
        m_Api = Factory.GetInstance("男");
        m_Api.wear();
        System.out.println("女生");
        m_Api = Factory.GetInstance("女");
        m_Api.wear();
    }

}

Client

3.变通

Factory的参数的来源:

1.来源于客户端。

2.来源于配置文件。
创建一个properties文件,内容可以是具体的实现类(依靠java的反射机制完成对象的创建,这样也可以避免当有新的实现类时还要修改工厂代码)、参数等

3.来源于程序运行期的某个值。

4.优缺点

优点:

帮助封装:使组件外部真正的面向接口编程

解耦:客户端不知道内部的具体实现

缺点:

可能增加客户端的复杂度:用户可能需要知道各个参数所代表的含义,并部分暴露了内部实现。

不方便创建子工厂:使用静态方法来创建接口,也就不能通过写简单工厂类的子类来改变创建接口的方法的行为了,但一般不需要这么做。

5.总结

客户端通过简单工厂创建一个实现接口的对象,然后面向接口编程,从客户端来看,他根本不知道具体的实现是什么,也不知道是如何实现的。因为我们在工厂内去new的具体实现对象,并没有在客户端内去new,因此客户端不知道具体实现是什么,这些都已经交给工厂了,而工厂的位置是在封装体(接口和具体的实现方式)内的,所以工厂可以知道是如何实现的。

    因此,简单工厂的主要思想就是将具体实现与客户隔离

添加到反广告列表

时间: 2024-12-20 01:08:00

每天一个设计模式-1 简单工厂的相关文章

【设计模式】简单工厂模式

以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下: #include <iostream> using namespace std; class Operation { public: Operation(double left, double right) { lhs = left; rhs = right; } const double GetLeft() const { return lhs; } const double GetRight() const { retur

设计模式之简单工厂模式

设计模式之简单工厂模式 动机:         不暴露实例化逻辑来创建对象.通过公共的接口创建新的对象.         这是一个简单的实现,客户端需要一个product,但是client不直接使用new对象,而是通过提供需要的对象信息来找factory得到新的product.         这个factory实例化一个具体的product并返回(转化成抽象的类),client段使用这个抽象的类而不用考虑它具体的实现. 应用举例:        也许工厂模式是使用最多的模式之一.举个例子,一个

初识设计模式之--简单工厂

作为一个刚刚入门的菜鸟.虽只学到了些许编程语言的皮毛(或者连皮毛都算不上),但是随着时间和学习的深入,"设计模式"这一专业术语便慢慢浮现在眼前. 到底何为设计模式呢?它的出现将会给我们带来哪些帮助?......等等一系列问题便会出现在我们脑海中.俗话说:问题才是探究知识的钥匙.就让我们带着 自己的疑问一同来学习设计模式. 首先,我们先来认识一下什么是设计模式,以及运用设计模式的优点. 设计模式的简单理解:模式是在某一背景下某个问题的一种解决方案.1.复用解决方案——通过复用已经公认的设

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

iOS设计模式 - (3)简单工厂模式

iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40381721 一.简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度.将一个具体类的实例化交给一个静态工厂方法来执行. 该模式中的角色包括: 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 抽象产品(Product):

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

设计模式 之 简单工厂与工厂方法

    最近开始学习<大话设计模式>,作者以通俗的方式来讲解,还有故事情节,幽默的对白,给人耳目一新的感觉.非常喜欢作者的这种步步深入,循循善诱的方式.学习了就要总结,总结的时候自己也学着作者的方式,以自己生活中的小例子来实现我们的设计模式.下面就开始我们的第一讲<简单工厂和工厂方法>.     前两天带着一个老乡去吃饭,当然,作为一个四川人,去外边吃饭当然是点我们著名的川菜!下面先用简单工厂来实现一下: using System; using System.Collections

设计模式初探——简单工厂模式

学习设计模式已经有一段时间了,<大话>也正看第二遍,可是却迟迟不敢下笔.算了,先拿简单的开刀吧. 简单工厂模式是设计模式中一种比较简单.基础的设计模式. 定义: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 包含元素: 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的