设计模式作业代码

1、单件模式

单线程:

public class Singleton{

    private static Singleton uniqueInstance;

    private Singleton(){

    }

    public static Singleton getInstance(){

       if(uniqueInstance==null){

           uniqueInstance=new Singleton();

       }

       return uniqueInstance;

    }

    public void test(){

       System.out.println("test singleton");

    }

}

public class test2 {

public static void main(String args[]){

    Singleton asingleton=Singleton.getInstance();

    Singleton bsingleton=Singleton.getInstance();

    asingleton.test();

    bsingleton.test();

    }

}

多线程:

public class Singleton{

    private static Singleton uniqueInstance;

    private Singleton(){

       test();

    }

    public static Singleton getInstance(){

       synchronized(Singleton.class){//同步

           if(uniqueInstance==null){

              uniqueInstance=new Singleton();

           }

       }

       return uniqueInstance;

    }

    public void test(){

       System.out.println("test singleton");

    }

}

2、代理模式

接口:

public interface MyForum {

    public void AddFile();

}

代理类:

public class MyForumProxy implements MyForum {

    private RealMyForum forum ;

    private int permission ; //权限值

    public MyForumProxy(int permission)

    {

       forum = new RealMyForum()

       this.permission = permission ;

    }

    //实现的接口

    public void AddFile()

    {

    //满足权限设置的时候才能够执行操作

    //Constants是一个常量类

       if(Constants.ASSOCIATOR == permission)

         {

           forum.AddFile();

         }

         else

            System.out.println("You are not a associator of MyForum ,please registe!");

     }

}

实体类:

public class RealMyForum implements MyForum {

    public void AddFile() {

       //省略具体实现步骤

       System.out.println("AddFile");

    }

}

 

3、观察者模式

一个实现发送邮件的观察者:

import java.util.Observable;

import java.util.Observer;

 

public class MailObserver implements Observer{  

     

    /** 

     * 这个类取名为MailObserver顾名思义她是一个用来发送邮件的观察者 

     */ 

    public void update(Observable o, Object arg) {  

        System.out.println("发送邮件的观察者已经被执行");  

    }  

}

一个实现发送jms消息的观察者

import java.util.Observable;

import java.util.Observer;

 

 

public class JMSObserver implements Observer{  

 

    public void update(Observable o, Object arg) {  

        System.out.println("发送消息给jms服务器的观察者已经被执行");  

    }  

}

被观察者:

import java.util.Observable;

import java.util.Observer;

 

public class Subject extends Observable{  

    /** 

     * 业务方法,一旦执行某个操作,则通知观察者 

     */ 

    public void doBusiness(){  

        if (true) {  

            super.setChanged();  

        }  

        notifyObservers("现在还没有的参数");  

    }   

      

    public static void main(String [] args) {  

        //创建一个被观察者  

        Subject subject = new Subject();  

          

        //创建两个观察者  

        Observer mailObserver = new MailObserver();  

        Observer jmsObserver = new JMSObserver();  

          

        //把两个观察者加到被观察者列表中  

        subject.addObserver(mailObserver);  

        subject.addObserver(jmsObserver);  

          

        //执行业务操作  

        subject.doBusiness();  

    }  

} 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java设计模式有相关源码) Abstract Factory:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 Adapter:将一个类的接口转换成客户希望的另一个接口,使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。 Bridge:将抽象部分与它的实现部分分离,使之可以独立变化。 Chain of Responsibility:为解除请求的发送者和接收者之间的耦合,而使多个对象有机会处理这个请求。将这些请求连成一个链,并沿着这条链传递该请求,直到有个对象处理它。 Command:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可以取消的操作。 Composite:将对象组合成树形结构以表示“部分-整体”的层次结构。Composite使得客户对单个对象和复合对象的使用具有一致性。 Decorator:动态地给一个对象添加一些额外的职责。就扩展功能而言,Decorator模式比生成子类方式更加灵活。 Facade:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,使得这个子系统更加容易使用。 Factory Method:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。Factory Method让一个类的实例化延迟到子类。 Flyweight:运用共享技术有效的支持大量细粒度的对象。 Interpreter:给定一个语言,定义它的文法的一种表示,并定义一个解释器用于解释特定文法。 Iterator:提供一种方法顺序访问一个聚合对象中的各种元素,而无需暴露该对象的内部表示。 Mediator:用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式相互引用,从而使得耦合松散,可以独立改变相互之间的交互。 Memento:不破坏封装的前提下,捕获对象的内部状态,并在该对象之外保存这个状态。 Observer:定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生变化时依赖于它的所有的对象都得到通知和刷新。 Prototype:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象。 Proxy:为其他对象提供一个代理以控制对这个对象的访问。 Singleton:保证一个类仅有一个实例,并提供一个访问它的全局点。 State:允许一个对象再内部状态改变的时候改变它的行为。对象看起来似乎修改了所属的类。 Strategy:定义一系列的算法,把他们封装起来,并可以相互替换,使算法独立于客户。 Template Method:定义一个操作中的算法骨架,而将这些算法的具体实现的代码延迟到子类中完成。 Visitor:标识一个作用于某对象结构中的各元素的操作,在不改变各元素的类的前提下定义作用于这个元素的新操作。
作业02 字符图像 目标:开发字符图像的类。一个字符图像是由多行ANSI可打印字符组成的,各行字符数量可以不同;一个字符图像可以通过加框(Frame)形成一个新的字符图像;两个字符图像可以通过顶端对齐的方式经水平连接(HCat)形成一个新的字符图像;两个字符图像可以通过左端对齐的方式经垂直连接(VCat)形成一个新的字符图像; 1. 现给出了一个字符图像的类定义,如下 实现上边的CharPic类。 2. 上边CharPic中,通过重载构造函数创建字符图像,但构造函数的语义不是非常直观,使用也需要特别小心。请试一试将重载的构造函数改成(简单)工厂方法,使得语义更清晰。 3. 考察完成的代码,你会发现: a) 在构造、拷贝、赋值时,会将各子图都重新构造了一遍,拷贝和赋值使用的也是深拷贝和深赋值,这样在合成复杂的字符图像过程中,子图需要频繁地复制或赋值,效率不高; b) 在使用一个字符图像对象的过程中,不会改变字符图像中的字符,因此重新构建子图、深复制、深拷贝显得没有必要; c) 合成一个新的字符图像后,新图像不会有关于”合成过程”的信息,即新图像不知道是通过水平连接得到的,还是垂直连接得到的,也不会知道“左子图”是什么等。 为此,重新设计了CharPic(为方便对比,类名改为Pic),希望通过子类型化和共享来避免abc中的问题。类的结构图(部分)如下: 其中,由于子类型化的存在,字符图像的拷贝采用了原型方法模式 (即虚拟拷贝构造函数);同时,禁止了图像对象间的赋值。 请定义并实现上述类图中的相关类,以及用于示例的相应主程序。 4. 若已知在复用3中的类时,可能还会增加有一些其它的需求,如: a) 增加对角线连接的字符图像 b) 显示时,可通过指定图像间隔(空白字符个数)显示字符图像; c) 变更FamePic中外框的字符(如变更为$号) d) 增加以加密的形式显示字符图像功能,如将字符图像中的A显示成Z,Z显示成Y。 e) 增加图像的swap功能,即交换左右或上下(对于SimplePic和FramePic的Swap,不做操作即可) 请继续对3中的类,使用桥接模式重新设计,部分类图如下;同时指出如何适应a-e的变化需求. 5. 现有Menu类及相关类,如下图 在显示AppleMenu和WindowMenu时,是以图片的形式显示的;对于ConsoleMenu当然也以图片形式显示更一致些,但若完全实现该功能,可能会比较繁琐,可以考虑复用已有的字符图像类。为此,请分别以类适配器模式和对象适配器模式,复用字符图像类,实现ConsoleMenu的show功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值