浅谈设计模式

原创 2007年10月08日 10:29:00

    花了两天时间好好研究了下设计模式,设计模式(design pattern),得到很多高人的大力推崇,就像很多人说学习设计模式好比修炼内功,难点就是如何在实际中运用。单单这两句话,我完全同意。下面,我谈下自己学习设计模式的感想。

   首先从工厂模式开始:

   工厂模式分三类:简单工厂(simple factory)模式;工厂方法(factory method)模式,又称多线性工厂模式 (polymophic factory pattern);抽象工厂(abstract factory)模式,又称工具箱(kit或toolkit)模式.

   那么工厂模式我们又该如何在实际中运用,或者什么时候该运用工厂模式?

   我们都知道,当我们实例化一个对象的时候,我们会这样写:以sample为例

  Sample sample=new Sample().

   很简单的创建对象,但实际情况是 我们经常需要在创建对象实例时做些初始化的工作,比如赋值,查询数据库或者更多。就像这样 Sample sample=new Sample(参数)。好像一切都对了,但是再次暴露了一个问题,如果参数需要很长一段代码,而不是简单的赋值。那我们的code就会相当难看。这个时候就需要refactor.于是工厂模式就该上场了。这也是完全符合OO的encapsulation 和 delegation思想的。下面我们简单看下如何运用

  简单工厂模式是由单个工厂类来决定该实例化哪个子类。

  假设要建立一个登记表单,允许你按照不同的格式如:“名 姓” 或者“姓,名”录入姓名,我们希望能通过姓和名之间是否有逗号来确定姓名的顺序。
  姓名的基类:

   public abstract class BaseName {
 protected String firstName;
 protected String lastName;

 public String getFirstName() {
  return this.firstName;
 }

 public String getLastName() {
  return this.lastName;
 }

}

姓在前的具体类:

public class FirstNameAtFirst extends BaseName{
       public FirstNameAtFirst(String name){
        int index=name.lastIndexOf(" ");
        if(index>0){
         firstName=name.substring(0,index);
         lastName=name.substring(index+1);
        
        }else{
         firstName=name;
         lastName="";
        }
       } 
}

名在前的具体类:

public class LastNameAtFirst extends BaseName{
       public LastNameAtFirst(String name){
        int index=name.indexOf(" ");
        if(index>0){
         lastName=name.substring(0,index);
         firstName=name.substring(index+1);
        }else{
         firstName="";
         lastName=name;
        }
       }
}

单一的工厂类(测试):

public class SimpleFactoryTest {
     public static BaseName getNamer(String entry){
      int index=entry.indexOf(",");
         if(index>0){
          return new FirstNameAtFirst(entry);
         }else{
          return new LastNameAtFirst(entry);
         }
     }
     public static void main(String[] args){
      String entry="jiang yuanyuan";
     
      System.out.println(getNamer(entry).getFirstName());
      System.out.println(getNamer(entry).getLastName());
     }
}

 

我们总结下其构造:

public class Creator
{
    //创建工厂方法,一般根据参数来决定产生哪个产品
 public Product factory()
 {
  return new ConcreteProduct();
 }
}
//抽象产品
public interface Product
{
}
//具体的产品,一般有多个
public class ConcreteProduct implements Product
{
 public ConcreteProduct(){}
}



十年Java”老兵“浅谈源码的七大设计模式

前言 一个专业的程序员,总是把代码的清晰性,兼容性,可移植性放在很重要的位置。他们总是通过定义大量的宏,来增强代码的清晰度和可读性,而又不增加编译后的代码长度和代码的运行效率;他们总是在编码的同...
  • yunzhaji3762
  • yunzhaji3762
  • 2018年01月29日 21:10
  • 26

浅谈高并发

最近经常有人在说高并发,然后和习总的交流后,我的感触甚多,加以总结,遂写此文。在此强调一下我说的java web 开发。 高并发说的就是短时间内多次访问,其实这是一个简单的容易理解的名字,但是许多人...
  • u012737788
  • u012737788
  • 2015年07月30日 10:48
  • 1159

简单工厂设计模式的好处

简单工厂:单独的,创建对象,返回对象。 在一个方法中创建好对象,调用此方法即根据传入参数可获得到不同需求的对象,我曾纳闷为什么要单独创建对象,为什么不直接new对象使用? 唉,好处就在这儿,咋想想...
  • Java_Dmz
  • Java_Dmz
  • 2017年09月02日 13:58
  • 224

Android设计模式之浅谈MVP

一.概述 MVP(Model-View-Presenter) 是总所周知MVC模式的一个演变,他们的主要目的都是划分模块职责,降低模块耦合,易测试,提高代码复用,这里主要针对Android平台来简单分...
  • l2show
  • l2show
  • 2015年06月27日 11:58
  • 37648

浅谈人工智能

历史      各个文明中都有杰出的工匠发明了自动机器来代替人类劳动,早在春秋时期鲁班就发明了世界上第一个机器人,可在空中飞翔‘三日不下’;三国时期蜀汉的诸葛亮发明了‘木牛流马’来运送战备物资,称得上...
  • oba_gaga
  • oba_gaga
  • 2016年10月09日 20:57
  • 4228

小白学《神经网络与深度学习》笔记之一-计算机的潜意识:浅谈神经网络-从神经元到深度学习

转载:http://www.cnblogs.com/subconscious/p/5058741.html 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向--深度学习的基础。学习神经网...
  • yingwei13mei
  • yingwei13mei
  • 2016年12月15日 21:35
  • 514

浅谈《设计模式》

设计模式,是一个程序员稍微进阶点的问题了。 之前在开发的时候用过不少方法,包括Instance单例模式(最常见的就是游戏中的各种全局管理器等),以及订阅-发布(又称观察者模式)等, 当时用的时候纯...
  • sha18363671217
  • sha18363671217
  • 2016年11月06日 08:33
  • 62

设计模式浅谈

1.单例模式 public class Singleton {     private static Singleton uniqueInstance = null;     private Sing...
  • u013365312
  • u013365312
  • 2014年01月03日 16:14
  • 332

设计模式--浅谈

设计模式 设计模式:解决某一类问题最有效的方法。 设计模式主要分三个类型: 1.创建型 2.结构型 3.行为型 java中23种设计模式 一、创建型 1.Singleton(单例模式):保证...
  • singit
  • singit
  • 2015年08月15日 20:42
  • 635

软件工程之浅谈

      发展至今,软件生产的发展经过了程序设计、程序系统、软件工程三个阶段;其中软件工程研究的主要内容是软件开发技术和软件开发管理两个方面。在软件开发技术方面,主要是研究软件开发方法、软件开发过程...
  • sunny19890816
  • sunny19890816
  • 2010年07月01日 23:18
  • 311
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈设计模式
举报原因:
原因补充:

(最多只允许输入30个字)