`
xgbjmxn
  • 浏览: 270685 次
  • 性别: Icon_minigender_1
  • 来自: 新乡
社区版块
存档分类
最新评论

Java中的23种设计模式—代码

阅读更多
http://www.cnblogs.com/luohuarenduli/archive/2008/01/17/1042425.html

package lq.test;

import java.io.*;
import java.util.*;

//*********创建型模式***************

//factory method 1
//1具体的构造算法,和2构造出的具体产品由子类实现
interface Product {
}

//或者我也提供一个工厂的接口,由这个抽象类来继承它

abstract class Factory {
    abstract public Product fmd();

    //我认为这个方方法的存在是,是对FactoryMethod方法的补充
    //例如可以为生成的对象赋值,计算为生成对象应付何值,前后的日值
    //且这些都是公用的,生成产品的最主要算法还是在FactoryMethod中,
    //这个方法只是起辅助作用,这也是一种思维方法,将具体的算法实现在一个方法中
    //而我不直接调用此方法,而使用另外的一个方法封装它,等到了更灵活的效果,而
    //子类需实现的内容是FactoryMethod
    //此方法是一个TemplateMethod
    public Product creat() {
        Product pd = null;
        System.out.println("before operation");
        pd = fmd();
        System.out.println("end operation");
        return pd;
    }
}

class Product1 implements Product {
}

class Factory1 extends Factory {
public Product fmd() {
Product pd = new Product1();
return pd;
}
}

//FactroyMethod 2
//这种方式简单实用
interface Producta {
}

interface Factorya {
Producta create();
}

class Producta1 implements Producta {}

class Factorya1 implements Factorya {
    public Producta create() {
        Producta pda = null;
        pda = new Producta1();
        return pda;
    }
}

//AbstractFactory
//AbstractFactory与FactoryMethod的不同在于AbstractFactory创建多个产品
//感觉此模式没有什么大用

//当然可以还有更多的接口
interface Apda {}
interface Apdb {}
interface Afactory {
    Apda createA();
    Apdb createB();
}

class Apda1 implements Apda {}
class Apdb1 implements Apdb {}

//有几个接口就有几个对应的方法
class Afactory1 implements Afactory {
    public Apda createA() {
        Apda apda = null;
        apda = new Apda1();
        return apda;
    }

    public Apdb createB() {
        Apdb apdb = null;
        apdb = new Apdb1();
        return apdb;
    }
}

//Builder
//一个产品的生成分为生成部件和组装部件,不同的产品每个部件生成的方式不同
//而组装的方式相同,部件的生成抽象成接口方法,而组装的方法使用一个TemplateMethod方法
interface Cpda {}
class Cpda1 implements Cpda {}

interface BuilderI {
    void buildPart1();
    void buildPart2();

    void initPd();
    Cpda getPd();
}

abstract class BuilderA implements BuilderI {
    Cpda cpda;

    public Cpda getPd() {
    initPd();

    //对对象的内容进行设置
    buildPart1();
    buildPart2();

    return cpda;
    }
}

class Builder extends BuilderA {
    public void buildPart1() {
    System.out.println(cpda);
    }

    public void buildPart2() {
    System.out.println(cpda);
    }

    public void initPd() {
        cpda = new Cpda1();
    }
}

//一个简单的生成产品的实现
//1
abstract class Fy {
    public abstract void med1();

    static class Fy1 extends Fy {
        public void med1() {
        }
    }

    public static Fy getInstance() {
        Fy fy = new Fy1();
        return fy;

        // Fy fy = new Fy1() {//这种匿名内部类是静态的!!
    }

    //2
    interface Pdd {}

    class Pdd1 implements Pdd {}

    abstract class Fya {
        public static Pdd getPd() {
        Pdd pdd = new Pdd1();
        return pdd;
    }
}

//Prototype 在java中就是clone,又包含深拷贝和浅拷贝
class CloneObja {
    public CloneObja MyClone() {
            return new CloneObja();
    }
}

class CloneObjb {
    public CloneObjb MyClone() throws Throwable {
        CloneObjb cobj = null;
        cobj = (CloneObjb) pcl(this);
        return cobj;
    }

    /深度拷贝算法
    private Object pcl(Object obj) throws Throwable {
    ByteArrayOutputStream bao = new ByteArrayOutputStream(1000);
    ObjectOutputStream objo = new ObjectOutputStream(bao);
    objo.writeObject(obj);

    ByteArrayInputStream bai = new ByteArrayInputStream(bao.toByteArray());
    ObjectInputStream obji = new ObjectInputStream(bai);

    Object objr = obji.readObject();
    return objr;
    }
}

//Singleton
//一个类只有一个对象,例如一个线程池,一个cache
class Singleton1 {
    public static Singleton1 instance = new Singleton1();

     private Singleton1() {
    }

    public static Singleton1 getInstance() {
        return instance;
    }
}

class Singleton2 {
    public static Singleton2 instance;

    private Singleton2() {
    }

    // public static Singleton2 getInstance() {
    // if (instance == null) {
    // instance = new Singleton2();
    // }
    //
    // return instance;
    // }


    public static Singleton2 getInstance() {
        synchronized(Singleton2.class) {
            if (instance == null) {
            instance = new Singleton2();
            }
        }

         return instance;
    }
}

//**********结构型模式**********

//Adapter
//基本方法有两种,一种是使用引用一种使用继承
//将不符合标准的接口转成符合标准的接口,接口的修改主要是参数的增减,
//返回值类型,当然还有方法名
//感觉这就是封装的另一种表示形式,封装有用方法封装(在方法中调用功能方法),
//用类封装(先传入功能方法所在的类的对象,通过调用此对象的功能方法)

//使用引用的形式
class Adapteea {
public void kk() {}
}

interface Targeta {
String vv(int i, int k);
}

class Adaptera implements Targeta{
Adapteea ade;

public Adaptera(Adapteea ade) {
this.ade = ade;
}

public String vv(int i, int k) {
//具体的业务方法实现在Adaptee中,这个方法
//只起到了接口转换的作用
//调用此方法是通过引用
ade.kk();
return null;
}
}

//使用继承形式的
class Adapteeb {
public void kk() {}
}

interface Targetb {
String vv(int i, int k);
}

class Adapterb extends Adapteeb implements Targetb {
public String vv(int i, int k) {
//调用此方法是通过继承
kk();
return null;
}
}

//Proxy
interface Subject {
void request();
}

class realSubject implements Subject {
public void request() {
//do the real business
}
}

class Proxy implements Subject {
Subject subject;

public Proxy(Subject subject) {
this.subject = subject;
}

public void request() {
System.out.println("do something");

subject.request();

System.out.println("do something");
}
}

//Bridge
//感觉就是多态的实现

interface Imp {
void operation();
}

class Cimp1 implements Imp {
public void operation() {
System.out.println("1");
}
}

class Cimp2 implements Imp {
public void operation() {
System.out.println("2");
}
}

class Invoker {
Imp imp = new Cimp1();

public void invoke() {
imp.operation();
}
}

//Composite

interface Component {
void operation();

void add(Component component);

void remove(Component component);
}

class Leaf implements Component {
public void operation() {
System.out.println("an operation");
}

public void add(Component component) {
throw new UnsupportedOperationException();
}

public void remove(Component component) {
throw new UnsupportedOperationException();
}
}

class Composite implements Component {
List components = new ArrayList();

public void operation() {
Component component = null;

Iterator it = components.iterator();
while (it.hasNext()) {
//不知道此component对象是leaf还是composite,
//如果是leaf则直接实现操作,如果是composite则继续递归调用
component = (Component) it.next();
component.operation();
}
}

public void add(Component component) {
components.add(component);
}

public void remove(Component component) {
components.remove(component);
}
}

//Decorator
//对一个类的功能进行扩展时,我可以使用继承,但是不够灵活,所以选用了
//另外的一种形式,引用与继承都可活得对对象的一定的使用能力,而使用引用将更灵活
//我们要保证是对原功能的追加而不是修改,否则只能重写方法,或使用新的方法
//注意concrete的可以直接new出来,
//而decorator的则需要用一个另外的decorator对象才能生成对象
//使用对象封装,和公用接口
//Decorator链上可以有多个元素

interface Componenta {
void operation();
}

class ConcreteComponent implements Componenta {
public void operation() {
System.out.println("do something");
}
}

class Decorator implements Componenta {
private Componenta component;

public Decorator(Componenta component) {
this.component = component;
}

public void operation() {
//do something before

component.operation();

//do something after
}
}

//Facade
//非常实用的一种设计模式,我可以为外部提供感兴趣的接口

class Obj1 {
public void ope1() {}
public void ope2() {}
}

class Obj2 {
public void ope1() {}
public void ope2() {}
}

class Facade {
//我得到了一个简洁清晰的接口
public void fdMethod() {
Obj1 obj1 = new Obj1();
Obj2 obj2 = new Obj2();

obj1.ope1();
obj2.ope2();
}
}

//Flyweight
//空

//**********行为型模式*************

//Chain of Responsibility
//与Decorator的实现形式相类似,
//Decorator是在原来的方法之上进行添加功能,而
//Chain则是判断信号如果不是当前处理的则转交个下一个节点处理
//我可以使用if分支来实现相同的效果,但是不够灵活,链上的每个节点是可以替换增加的,相对
//比较灵活,我们可以设计接口实现对节点的增删操作,而实现更方便的效果
//这个是一个链状的结构,有没有想过使用环状结构

interface Handler {
void handRequest(int signal);
}

class CHandler1 implements Handler {
private Handler handler;

public CHandler1(Handler handler) {
this.handler = handler;
}

public void handRequest(int signal) {
if (signal == 1) {
System.out.println("handle signal 1");
}
else {
handler.handRequest(signal);
}
}
}

class CHandler2 implements Handler {
private Handler handler;

public CHandler2(Handler handler) {
this.handler = handler;
}

public void handRequest(int signal) {
if (signal == 2) {
System.out.println("handle signal 2");
}
else {
handler.handRequest(signal);
}
}
}

class CHandler3 implements Handler {
public void handRequest(int signal) {
if (signal == 3) {
System.out.println("handle signal 3");
}
else {
throw new Error("can't handle signal");
}
}
}

class ChainClient {
public static void main(String[] args) {
Handler h3 = new CHandler3();
Handler h2 = new CHandler2(h3);
Handler h1 = new CHandler1(h2);

h1.handRequest(2);
}
}

//Interpreter
//感觉跟Composite很类似,只不过他分文终结符和非终结符

//Template Method

abstract class TemplateMethod {
abstract void amd1();

abstract void amd2();

//此方法为一个Template Method方法
public void tmd() {
amd1();
amd2();
}
}  
  

    // public void med1() {
    // }
    // };
    // return fy
    }
分享到:
评论

相关推荐

    java之23种设计模式完整代码

    这里我们探讨的“Java之23种设计模式完整代码”是一份宝贵的资源,它包含了所有23种经典设计模式的实现示例。这份资料能够帮助开发者深入理解每种设计模式的概念、应用场景以及它们之间的差异。 设计模式是经过时间...

    JAVA版23种设计模式代码示例源码.rar

    JAVA版23种设计模式代码示例源码

    java23种设计模式及其代码

    设计模式是软件工程中的一种最佳实践,它是在特定情境下为了解决常见问题而形成的一套可复用的解决方案。Java作为广泛应用的编程语言,其23种设计模式是每位专业...欢迎大家下载这份资料,一起探索Java设计模式的世界。

    Java之23种设计模式解析

    Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的经验总结和最佳实践。本资源“Java之23种设计模式解析”源自尚硅谷教育机构,由宋红康老师主讲的“玩转Java”系列课程。这份资料详细介绍了...

    java23种设计模式+23个实例demo

    java23种设计模式+23个实例demo: 关于代码的几点说明: 1. 代码为根据个人对Design Pattern的学习理解写出, 2. 每个Pattern均是一个目录,其目录名即是Pattern的名字, 所有代码用JDeveloper 9i 和JBuilder 6.0编写...

    java23种设计模式代码实例讲解

    Java设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,旨在提高代码的可重用性、可维护性和可扩展性。本资源包含了23种经典的Java设计模式的代码实例,对于正在学习Java的开发者来说,是提升理解...

    java23种设计模式详解+源码(绝对详解)

    在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...

    设计模式示例代码(java)

    设计模式示例代码(java)设计模式示例代码(java)v设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)设计模式示例代码(java)...

    java23中设计模式详解

    Java中的23种设计模式是软件工程中非常重要的概念,它们是解决常见编程问题的成熟解决方案,被广泛应用于各种复杂的软件系统中。这些模式在不同的上下文中提供了可重用的结构和行为,使得代码更加清晰、可维护和扩展...

    23种java设计模式.pdf

    JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建模式是指在创建对象时...

    Java23种设计模式源代码

    Java设计模式是软件工程中的一种最佳实践,它们是解决常见编程问题的经验总结,可以提高代码的可重用性、可维护性和灵活性。本资源包含了23种经典的Java设计模式的源代码实现,每种模式都有详细的注释,是学习和理解...

    Java中23种设计模式(个人整理实用).doc

    下面是 Java 中 23 种设计模式的详细介绍: 创建型模式 1. 工厂方法模式(Factory Method Pattern) 工厂方法模式是一种创建型设计模式,它提供了一种创建对象的接口,允许客户端创建对象,而无需指定创建的类别...

    java23种设计模式详解

    java23种设计模式详解附带所有代码实现,适合初学者,请点个赞,谢谢

    Java开发中的23种设计模式代码整理

    这个压缩包文件包含了23种经典的Java设计模式,这些模式通常被分为三大类:创建型、结构型和行为型。 1. 创建型设计模式: - 单例模式:确保一个类只有一个实例,并提供全局访问点。 - 工厂方法模式:定义一个...

    JAVA的23种设计模式PPT讲解

    本资源包含三个PPT,分别针对23种Java设计模式进行了分类讲解,对初学者来说是一份宝贵的资料。 首先,23种设计模式按照它们的主要功能可以分为三大类:创建型模式、结构型模式和行为型模式。 1. 创建型模式...

    JAVA之23种设计模式的完整实例代码和注释

    本资源“JAVA之23种设计模式的完整实例代码和注释”涵盖了所有GOF(Gang of Four)提出的23种经典设计模式,它们是软件设计的基石。 1. **创建型模式**(Creational Patterns): - **单例模式(Singleton)**:...

    23种设计模式的java实现源代码.RAR

    本压缩包包含的是23种经典设计模式的Java实现源代码,下面我们将详细探讨其中的两种主要模式:单例模式和工厂模式。 1. 单例模式(Singleton Pattern): 单例模式是一种确保一个类只有一个实例,并提供全局访问点...

    Java中23种经典设计模式(附代码)

    在Java编程领域,设计模式是解决常见问题的模板,它们是经过时间和实践验证的最佳实践,为软件开发提供了可重用的解决方案。...因此,对于想要在Java领域深入发展的工程师来说,学习并掌握这23种设计模式是非常必要的。

    Java23种设计模式代码实例(可运行)

    花了一个礼拜时间,仔细研究了每一种设计模式,参考了一些网上的实例和板桥里人的设计模式(板桥里人的很多代码都不能运行),精心设计的用例,这些用例都是在有理解的基础之上写的,初学者几天可以搞定,好过你去看那些厚厚...

    java23种设计模式详细讲解

    设计模式是软件工程中解决常见问题的模板或通用解决方案,Java设计模式是这些解决方案在Java语言中的具体实现。《java23种设计模式详细讲解》这本书系统地介绍了23种设计模式,并通过具体的例子来阐释每种模式的应用...

Global site tag (gtag.js) - Google Analytics