精华内容
下载资源
问答
  • 设计模式大作业

    2013-12-18 21:06:03
    设计模式作业 包含多种多种模式 模板 代码 项目
  • 设计模式大作业
  • 设计模式大作业游戏

    2018-05-24 17:03:29
    这是本人研究生期间完成的一次设计模式大作业,有关于设计模式的课程结课作业,设计模式总共23种,在这里我运用了6种设计模式设计了一款游戏,运用了c#编程语言,压缩包中含有项目的说明书,PPT,完整的源码,还有...
  • 软件设计模式大作业

    2020-10-18 22:30:59
    java设计模式期末大作业,运用了6种模式,包括简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式、观察者模式,文档包括系统流程,系统类图,各个模式的子类图,源代码,实验截图。绝对完整.
  • 没什么理由,就是因为作业用代理模式最简单.......1. 中介隔离作用在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用2. 开闭原则,增加功能代理类...

    代理模式

    简单来说,就是用一个类来代理另一个类,属于结构性模式。

    那为什么要使用代理模式?

    没什么理由,就是因为作业用代理模式最简单.......

    1. 中介隔离作用

    在某些情况下,一个客户类不想或者不能直接引用一个委托对象,而代理类对象可以在客户类和委托对象之间起到中介的作用

    2. 开闭原则,增加功能

    代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功能来扩展委托类的功能,这样做我们只需要修改代理类而不需要再修改委托类,符合代码设计的开闭原则。

    代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。

    代理类本身并不真正实现服务,而是通过调用委托类的相关方法,来提供特定的服务。

    3. 特征

    代理类和委托类实现相同的接口

    4. 与其他模式的区别

    • 和适配器模式的区别:适配器模式主要改变所考虑对象的接口,而代理模式不能改变所代理类的接口。
    • 和装饰器模式的区别:装饰器模式为了增强功能,而代理模式是为了加以控制。

    静态代理实现

    一、模式图968857ecc21c399f3f98fbbda97cc360.png二、实现

    1. 共同实现的接口
    interface IScore{
        /**
         * 查询积分
         */

        public function getScore($member_id);
    }
    1. 委托类
    class scoreModel implements IScore{
      public function getScore($member_id){
        $conn = (new Db())->connect();
        //查询分数
        $score = (new Db())->select($conn, 'member''score''member_id='.$member_id);
        foreach ($score as $key => $value) {
        $score = $value['score'];
        }
        return $score;
      }
    }
    1. 代理类
    class scoreProxy implements IScore{
        public function getScore($member_id){
            // dump($member_id);
            $score = $this->score->getScore($member_id);
            return $score;
        }
    }
    1. 使用
    $score = (new scoreProxy)->getScore($member_id);

    往期文章

    1. 如何调通老师给的代码?
    2. 理一理老师的代码,以及功能如何实现?
    展开全文
  • 北邮JAVA高级语言程序设计(选修课)设计模式大作业 题目描述: 设计模式一(单子、工厂、策略模式)练习 1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。对所有的教材类图书 实行每本一元的折扣;...

    北邮JAVA高级语言程序设计(选修课)设计模式大作业

    题目描述:
    设计模式一(单子、工厂、策略模式)练习
    1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。对所有的教材类图书 实行每本一元的折扣;对连环画类图书提供每本7%的促销折扣;而对非教材类的计算机图书有3%的折扣;对其余书没有折扣。使用策略模式、工厂模式、单子模式进行设计,类图如下。

    类图说明:

    在这里插入图片描述Sale:代表依次销售。getTotal方法用于返回本次销售的优惠后总价。
    SaleLineItem:代表一个销售项目。1次销售会对应多个销售项目。如顾客总共购买了2本《UML与模式应用》,3本《Java与模式》,则对应需要创建两个SaleLineItem对象,1个对应的是2本《UML与模式应用》的购买,1个对应的是3本《Java与模式》的购买。
    ProductSpecification:书的描述信息,包括书的isbn号、书名、单价和书的类型。书的类型包括:非教材类的计算机图书、教材类图书、连环画类图书、其他共4种。在本例中共有5种书(见后面描述),因此需要创建5个ProductSpecification对象。
    PricingStrategyFactory:策略工厂,负责根据书的类型提供对应的策略类,策略类将根据具体的优惠策略计算折扣后1个销售项目(SaleLineItem)的总价。要求:该策略工厂要设计成单子。
    IPricingStrategy:策略类的接口,用于向SaleLineItem屏蔽具体的策略类。
    FlatRateStrategy:按每本优惠x元的策略。
    PercentageStrategy:按百分比进行优惠的策略。
    NoDiscountStrategy:不进行优惠的策略。思考:为什么要设计这个类?如果没有这个类,会引发什么问题?
    要求:设计中要考虑优惠的比例(如每本优惠1元、7%、3%)会发生变化?在设计时要考虑到这种变化,使得变化到来时,对现有代码的影响尽量小。
    注意:本例中,策略是应用于1个SaleLineItem对象,而不是应用于Sale对象,为什么?

    请用Java语言实现上述每一个类,并书写测试类,实现下述场景:
    一次购物,购买了2本教材类图书《UML与模式应用》,单价是18元/本;购买了2本非教材类的计算机图书《Java与模式》,单价是34元/本;购买了1本非教材类的计算机图书《HeadFirst 设计模式》,单价是58元/本;购买了3本连环画类图书《爱丽丝历险记》,单价是30元/本;购买了1本其他类图书《煲汤大全》,单价是20元/本。请计算出本次购物优惠后价格。

    源代码:

    import java.util.ArrayList;
    import java.util.Iterator;
    
    public class TestClass {
    	public static void mian(String[] args)
    	{
    
    		ProductSpecification p1 = new ProductSpecification("00001","UML与模式应用",18,"A");
    		ProductSpecification p2 = new ProductSpecification("00001","Java与模式",34,"C");
    		ProductSpecification p3 = new ProductSpecification("00003","HeadFirst设计模式",58,"C");
    		ProductSpecification p4 = new ProductSpecification("00004","爱丽丝历险记",30,"B");
    		ProductSpecification p5 = new ProductSpecification("00005","煲汤大全",20,"D");
    		PricingStrategyFactory factor = PricingStrategyFactory.getInstance();
    		SaleLineItem item1 = new SaleLineItem(2,p1,factor.getPricingStrategy(p1.getType()));
    		SaleLineItem item2 = new SaleLineItem(2,p2,factor.getPricingStrategy(p2.getType()));
    		SaleLineItem item3 = new SaleLineItem(1,p3,factor.getPricingStrategy(p3.getType()));
    		SaleLineItem item4 = new SaleLineItem(3,p4,factor.getPricingStrategy(p4.getType()));
    		SaleLineItem item5 = new SaleLineItem(1,p5,factor.getPricingStrategy(p5.getType()));
    		Sale s = new Sale();
    		s.addItem(item1);
    		s.addItem(item2);
    		s.addItem(item3);
    		s.addItem(item4);
    		s.addItem(item5);
    		System.out.println("The total price is:"+String.format("%.2f",s.getTotal()));
    	}
    }
    
    //书的描述信息,包括书的isbn号、书名、单价和书的类型
    class ProductSpecification
    {
    	String ISBN;
    	String Name;
    	double Price;
    	String Type;
    	
    	public ProductSpecification(String ISBN, String Name, double Price ,String Type) 
    	{
    		this.ISBN = ISBN;
    		this.Name = Name;
    		this.Price =Price;
    		this.Type = Type;
    	}
    	public String getISBN() 
    	{
    		return ISBN;
    	}
    	public String getName()
    	{
    		return Name;
    	}
    	public double getPrice() 
    	{
    		return Price;
    	}
    	public String getType() 
    	{
    		return Type;
    	}
    }
    
    //根据具体的优惠策略计算折扣后1个销售项目(SaleLineItem)的总价
    class PricingStrategyFactory
    {
    	 private static PricingStrategyFactory instance = new PricingStrategyFactory();
    	 private PricingStrategyFactory() {};
    	 public static PricingStrategyFactory getInstance() 
    	 {
    			return instance;
    	 }
    	 
    	 public IPricingStrategy getPricingStrategy(String BookType) 
    	 {
    		if(BookType.equals("A")) 
    		{
    			return new FlatRateStrategy(1);//教材类图书,每本1元折扣
    		}
    		else if(BookType.equals("B")) 
    		{
    			return new PercentageStrategy(7);//连环画类图书,每本7%折扣
    		}
    		else if(BookType.equals("C")) 
    		{
    			return new PercentageStrategy(3);//非教材类的计算机图书,每本3%折扣
    		}
    		else 
    		{
    			return new NoDiscountStrategy();//其它,没有折扣
    		}
    	}
    }
    
    interface IPricingStrategy
    {
    	public double getSubTotal(SaleLineItem sli);//得到单本图书优惠后的价格
    }
    
    class SaleLineItem 
    {
    	private int copies;
    	private ProductSpecification prodSpec;
    	private IPricingStrategy strategy;
    	
    	public SaleLineItem(int copies, ProductSpecification prodSpec, IPricingStrategy strategy)
    	{
    		this.copies = copies;
    		this.prodSpec = prodSpec;
    		this.strategy = strategy;
    	}
    	public double getSubTotal() 
    	{
    		return copies*(strategy.getSubTotal(this));
        } //得到此种图书,优惠后的价格
    	public ProductSpecification getPro()
    	{
    		return prodSpec;
    	}
    }
    
    class FlatRateStrategy implements IPricingStrategy
    {
    	private double discountPerBook;
    	public FlatRateStrategy(double a){
    		discountPerBook = a;
    	}  //构造函数
    	
    	public double getSubTotal(SaleLineItem sli) {
    		return sli.getPro().getPrice()-discountPerBook; //原先的价格-优惠的价格
    	}
    }
    
    class PercentageStrategy implements IPricingStrategy
    {
    	private int discountPercentage;
    	public PercentageStrategy(int a) 
    	{
    		discountPercentage = a;
    	}
    	
    	public double getSubTotal(SaleLineItem sli) 
    	{
    		double discount = discountPercentage/100.0;
    		return sli.getPro().getPrice()*(1-discount);
    		//原先的价格*(1-折扣力度)
    	}
    }
    
    class NoDiscountStrategy implements IPricingStrategy
    {
    	 public NoDiscountStrategy() {} //构造函数
    	 public double getSubTotal(SaleLineItem sli) 
    	 {
    		 return sli.getPro().getPrice();//直接返回价格
    	 }
    }
    
    class Sale
    {
    	private ArrayList<SaleLineItem> list = new ArrayList();
    	public Sale() {}
    	
    	public void addItem(SaleLineItem it) 
    	{		
    	   list.add(it);
    	}
    	public double getTotal() 
    	{
    	    double total =0;
    	    for(Iterator<SaleLineItem> iter = list.iterator();iter.hasNext();) 
    	    {
    	    	total = total + iter.next().getSubTotal();
    	    }
    	    	return total;
    	} 
    }
    
    展开全文
  • 之所以称其为结构类模式,是因为他们都是通过组合类或对象产生更结构以适应更高成层次的逻辑需求。我们来分析一下装饰模式和代理模式、装饰模式和适配器模式。装饰模式VS代理模式首先要说明的是装饰模式是代理模式...
    • 结构类模式包括适配器模式、桥梁模式、组合模式、装饰模式、门面模式、享元模式和代理模式。之所以称其为结构类模式,是因为他们都是通过组合类或对象产生更大结构以适应更高成层次的逻辑需求。我们来分析一下装饰模式和代理模式、装饰模式和适配器模式。

    装饰模式VS代理模式

    首先要说明的是装饰模式是代理模式的特殊应用,两者的共同点是有相同的接口,不同点事代理模式着重对代理过程的控制,而装饰模式则是对类的功能进行加强或减弱,着重类功能的变化。我们看看两者的类图吧!就是一模一样只是代理类和装饰类的名字不一样了而已。我们通过代理类和装饰类看看二者的区别吧。

    ff09d4f492e612671002113804d89ac0.png
    //代理模式还是侧重于对代理过程的控制,是否允许功能的执行public class SingerAgent{ private Singer singer; public SingerAgent(Singer singer){ this.singer = singer; } public void singing(){ Random rand = new Random(); if(rand.nextBoolean()){ System.out.println("代理人同意歌手唱歌"); singer.sing(); }else{ System.out.println("代理人不同意歌手唱歌"); } }}//装饰模式侧重于对装饰对象功能的增强或者减弱public class SingerWithJet{ private Singer singer; public SingerWithJet(Singer singer){ this.singer = singer; } public void singing(){ System.out.println("歌手的舞蹈优美"); singer.sing(); }}

    代理模式是把当前行为或功能委托给其它对象执行,代理类负责接口限定:是否可以调用真实角色,以及是否对发送到真实角色的消息进行变形处理,它不对主题角色的功能做任何处理,保证原汁原味的调用。代理模式的极致就是AOP,采用Spring框架必然要使用的技术,它就是使用了代理和反射的技术。

    装饰模式是在要保证接口不变的情况下加强对象的功能,它保证的是被修饰对象功能比原始对象更加丰富,但是不做准入条件和准入参数的判断,是否可以执行类的功能,过滤输入参数是否符合规则等都不是装饰模式关系的内容。

    装饰模式VS适配器模式

    装饰模式和适配器模式在类图的设计上差别比较大,但是他们的功能有很多相似的地方,都能够实现包装的作用,通过委托方式实现功能。不同点是:装饰模式包装的是自己的兄弟类,隶属于同一个家族(相同接口或父类),适配器模式则修饰非血缘关系的类,把一个非本家族对象伪装成一个本家族的对象,而对象的本质还是非相同接口的对象。我们还是以丑小鸭的故事来说明这个问题吧。

    首先,我们看看装饰模式实现丑小鸭变白天鹅类图实现。

    fafaa001337bdcc4f04daf5d44d1ac8e.png
    public interface Swan { public void fly(); //飞行能力 public void cry(); //叫声 public void desAppearance(); //外表}public class UglyDuckling implements Swan{ @Override public void fly() { // TODO Auto-generated method stub System.out.println("丑小鸭小时候不会飞"); } @Override public void cry() { // TODO Auto-generated method stub System.out.println("咕噜...咕噜"); } @Override public void desAppearance() { // TODO Auto-generated method stub System.out.println("小时候外形是脏兮兮的白色,毛茸茸的大脑袋"); }}public class Decorator implements Swan{ private Swan swan; public Decorator(Swan swan){ this.swan = swan; } @Override public void fly() { // TODO Auto-generated method stub swan.fly(); } @Override public void cry() { // TODO Auto-generated method stub swan.cry(); } @Override public void desAppearance() { // TODO Auto-generated method stub swan.desAppearance(); } protected Swan getSwan(){ return this.swan; }}public class BeautifulAppearance extends Decorator{ public BeautifulAppearance(Swan swan) { super(swan); // TODO Auto-generated constructor stub } public void desAppearance(){ super.getSwan().desAppearance(); System.out.println("纯白色的外表,非常惹人喜爱!"); }}public class StrongBehavior extends Decorator{ public StrongBehavior(Swan swan) { super(swan); // TODO Auto-generated constructor stub } public void fly(){ super.getSwan().fly(); System.out.println("长大后的丑小鸭变白天鹅会飞了"); }}public class Client { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Swan duck = new UglyDuckling(); duck.cry(); duck.fly(); duck.desAppearance(); duck = new BeautifulAppearance(duck); duck = new StrongBehavior(duck); duck.cry(); duck.fly(); duck.desAppearance(); }}

    装饰模式实现丑小鸭的蜕变,关注对象功能的强化,是对原始对象的行为和属性的修正和加强,把原本被人视为歧视、冷落的丑小鸭通过两次强化处理最终转变为收人喜爱、羡慕的白天鹅。

    但是通过适配器解决丑小鸭变白天鹅的问题就有点不一样了,我们得把丑小鸭伪装成鸭类,得让她实现鸭类的接口,表现鸭类的行为特征,但是经过时间的推移,丑小鸭终究会变成白天鹅,从而表现出天鹅的特征。为此,需要丑小鸭类继承自天鹅类,从而也实现鸭类的接口。其通用类图如下:鸭类的接口有会叫(void cry())、外观(desAppearance())、其他表现(desBehavior()),天鹅接口有鸣叫、飞翔、以及外观。

    eb01ce09e6f7d4dc5cc2702ccb03a8f5.png
    public interface IDuck { public void cry(); //叫声 public void desAppearance(); //外观 public void desBehavior(); //其他表现}public interface ISwan { public void cry(); public void desAppearance(); public void fly();}public class WhiteSwan implements ISwan{ @Override public void cry() { // TODO Auto-generated method stub System.out.println("咕噜...咕噜..."); } @Override public void desAppearance() { // TODO Auto-generated method stub System.out.println("纯白色的羽毛,非常惹人喜爱!"); } @Override public void fly() { // TODO Auto-generated method stub System.out.println("会飞翔"); }}public class UglyDuckling extends WhiteSwan implements IDuck{ @Override public void desBehavior() { // TODO Auto-generated method stub System.out.println("会游泳"); super.fly(); } public void cry() { super.cry(); } public void desAppearance() { super.desAppearance(); }}public class Client { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub IDuck uglyDuckling = new UglyDuckling(); uglyDuckling.cry(); uglyDuckling.desAppearance(); uglyDuckling.desBehavior(); }}

    采用适配器模式讲述丑小鸭变天鹅的故事,我们首先观察到的是鸭和天鹅的不同点,建立了不同的接口以实现不同的物种,然后在需要的时候把一个物种伪装成另一个物种,实现不同物种的相同处理过程,这就是适配器模式。

    • 最佳实践
    • 意图不同,装饰模式的意图是加强对象的功能,例子中是把一个自卑的丑小鸭变成一个自信的白天鹅,它不改变类的行为和属性,只是增加功能,而适配器模式则关注的是转化,它的主要意图是两个不同对象之间的转化,它可以把一个天鹅转化为小鸭子看待,也可以把一只小鸭子看成小天鹅,其实就是关注类之间的转化啦。
    • 施与对象不同,装饰对象必须是自己的同宗,也就是相同的接口或父类,只要在具有相同的属性和行为的情况下,才能比较行为是增加还是减弱;适配器模式则必须是不同的两个对象,因为它侧重转化,只有两个不同的对象才有转化的必要。
    • 场景不同,装饰模式在任何时候都可以使用,只要是想增强类的功能,而适配器模式则是一个补救模式,一般出现在系统成熟或已将构建完毕的项目中,作为一个紧急处理手段采用。
    • 扩展性不同,装饰模式很容易扩展,如果不需要装饰,直接去掉装饰类就可以,而且可以继续增加新的装饰类;而适配器模式相当于在两个不同对象之间架起了一座沟通的桥梁,需要从系统整体考虑是否能够撤销。
    展开全文
  • 设计模式大作业(含源代码+PPT+报告)

    热门讨论 2014-03-20 20:35:38
    本科阶段写过一个小游戏,是一门课的大作业,当时能力有限,代码能力以及对设计模式的理解和运用都不够,后来研究生期间,由于《软件结构设计与模式分析》这门课的期末考试需要我们编写并分析一个软件,软件类型不限...
  • 内容涵盖了设计模式、重构、测试驱动开发、极限编程、软件体系架构设计等重要的设计方法与技巧。这些内容是软件设计中最重要的“流行元素”,是程序员向设计师“涅磐”的基石,是从小工到专家修炼法门。架构是系统...

    写在前面

    “给我一个支点,我就能撬起地球”。关键不在于力量有多大,而在于如何合理地利用力量。软件设计同样如此。思想的确立,技巧的把握,将在很大程度上决定软件架构的合理性。内容涵盖了设计模式、重构、测试驱动开发、极限编程、软件体系架构设计等重要的设计方法与技巧。这些内容是软件设计中最重要的“流行元素”,是程序员向设计师“涅磐”的基石,是从小工到专家修炼法门。

    架构是系统设计的一部分,它突出了某些细节,并通过抽象省略掉了另一些细节。软件系统的架构包括行为上的和结构上的。外部行为描述展示了软件如何与用户、其他设备和外部设备进行交互,也就是需求。结构描述展示了软件如何被划分为多个部分,以及这些部分的关系。

    架构的设计受到许多因素的制约,架构是好是坏并没有统一的标准。这取决于人们对软件的需求、软件被构建和运行的环境,以及软件团队本身的特点等等因素。评价软件好坏有很多指标,例如性能、安全、可伸展性等。无论是什么,学习都是需要有一个系统的计划和步骤,只有这样才可以更高效地投入学习。

    9816209470df20f16c9a4005ef50b30b.png

    Java架构完美之设计

    包含架构设计的:

    1. 8项原则;
    2. 21种设计技巧;
    3. 25个温馨提示;
    4. 39个实战经典案例;
    e6e3c8e7c751aa3abfa577fa0710b5f2.png

    目录大纲介绍:

    8f0e702019f44134797c84406f035155.png
    04cecaa4f312fb45b1ae9fc5f84caebd.png
    626700f0694283375d2c755584849947.png

    主要内容介绍:

    第一部分:软件架构理论

    第1章 架构概述+第2章 架构基本理论

    介绍了软件架构师练就的方法、软件架构设计模式、软件架构开发模型、软件架构模式、软件架构思维、软件架构编程思想以及软件架构设计原则等,为软件架构设计的基本理论;

    41c5c22f397854bf4bb5feedda8001f0.png
    93bcb00e5a0f91f0b860c837de922b5e.png

    第二部分:软件架构高级技能

    第3—6章,介绍了软件架构师必备的工具体系、Java机制技能要点专题、Java后台技术栈技能要点专题以及日志架构设计、安全架构设计、权限架构设计、验证架构设计、异常架构设计、消息架构设计、阻塞架构设计、数据字典架构设计Java八大核心架构设计体系,为软件架构设计的高级技能体系;

    第3章 构建开发工具体系

    d9b7681f2f9722dadd693829a9453520.png

    第4章 Java机制技能专题

    19338282077e9a43b0f5984994e1a391.png

    第5章 Java后台技术栈专题

    b1409ac24654f825265fcb8686580724.png

    滴滴!!!转发这篇文章+关注我,后台私信【666】即可

    第三部分:软件架构综合技能

    第6~13章,以Spring技术为脉络,介绍了JavaWeb、 SpringMVC、 Spring Integration、Spring Boot、SOAP WebService、 REST WebService 以及框架测试等架构设计相关的核心技术,为软件架构设计与实现相关的综合技能体系;

    第7章 JavaWeb

    879a4ea098e539e774f145f53ca95906.png

    第8章 SpringMVC

    60e1e23b4286d5c90ccc588ed742b32f.png

    第9章 Spring Integration

    337a16fa07ecd73afee71cac16fed3a1.png

    第10章 Spring Boot

    5aa9c4cc7106feebf7710fe1a978fc01.png

    第11章 SOAP WebService

    2b702f2cb524f023a4b6f7e32e105682.png

    第12章 REST WebService

    d36ecc9f7d7980091a3b60dffa6c5771.png

    第13章 框架测试

    6d162e9bcda8d63e9f4877b6779104c9.png

    第四部分:软件架构创新

    第14、15章,以开源框架以及自动化代码生成工具开发为中心,启发读者的创新思维,为软件架构的创新技能体系。

    第14章 开源框架

    5379e3b4979adb5485e7c82d9139ef9c.png

    第15章 自动化代码生成工具

    dc945320c574508c1561f1677ccaca63.png

    写在最后

    以上就是Java架构完美之架构,领取方式:转发这篇文章+关注,后台私信【666】即可。当然学习要越系统越好,每一步都要有计划、有步骤,忙里偷闲,将架构的一些技术栈总了下来,全是Xmind,这样学习起来比较有方向,有规划。

    22ce79936b5f9c505a815ddc2d093047.png
    展开全文
  • 做了一个豆腐商店,运用到了五种设计模式,具体的设计模式都分包了导入就能跑,有什么不足还望各路大神指出,哈哈。
  • 东南大学java设计模式作业观察者模式 实例一:猫、狗与老鼠 假设猫是老鼠和狗的观察目标,老鼠和狗是 观察者,猫叫老鼠跑,狗也跟着叫,使用 观察者模式 描述该过程。 类图: 代码: import java.util.*; public ...
  • 实例一:猫、狗与老鼠假设猫是老鼠和狗的观察目标,老鼠和狗是观察者,猫叫老鼠跑,狗也跟着叫,使用观察者模式描述该过程。类图:代码:import java.util.*;public abstract class MySubject{protected ArrayList ...
  • 实例一:模拟毛笔现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=...本实例使用桥接模式来模拟毛笔的使用过程。类图:Java代码:public interface Color{public void bepaint(...
  • 软件设计模式 行为式模式 南华大学 类图 代码 个人总结 职责链模式 组合命令模式 中介者模式 备忘录模式 观察者模式 状态模式
  • 实例二加密适配器 某系统需要提供一个加密模块将用户信息如密码等机密信息加密...使用适配器模式设计该加密模块实现在不修改现有类的基础上重 用第三方加密方法 . 类图 Java 代码 public class CipherAdapter extend
  • 1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。对所有的教材类图书 实行每本一元的折扣;对连环画类图书提供每本7%的促销折扣;...使用策略模式、工厂模式、单子模式进行设计,类图如下。
  • 实例:虚拟聊天室某论坛系统欲增加一个虚拟聊天室,允许论坛会员通过该聊天室进行信息交流,普通会员(CommonMember)可以给其他会员发送文本信息...用中介者模式设计该虚拟聊天室。类图:代码:public abstract clas...
  • 16春学期《软件设计模式》在线作业1DADDC CDAABAAABA ABABA 16春学期《软件设计模式》在线作业2AAACD CDBDAAABBB AAAAB16春学期《软件设计模式》在线作业3CACAB CBDBBBBBAA BAAB...
  •  观察者模式是一种使用频率非常高的设计模式,无论是移动应用、web应用或者桌面应用,观察者模式几乎无处不在,它为实现对象之间的联动提供了一套完整的解决方案, 凡是涉及一对一或者一对多的对象交互场都可以使用...
  • 首先看下设计模式6原则的概览。1、开闭原则 | 对扩展开放,对修改关闭。2、里氏代换原则 | 子类都可以做到代替基类的出现。3、依赖倒转原则 | 针对接口编程,依赖于抽象而非具体。4、接口隔离原...
  • 软件设计模式作业3-抽象工厂模式画图程序简化版 w工厂方法模式 ü每个具体工厂只有一个或者一组重载的工厂方法,只能生产一种产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销 w抽象工厂模式 ü一...
  • 期末作业系列之设计模式

    千次阅读 热门讨论 2017-12-02 16:04:54
    又是一年的期末,今年大三上学期的设计模式作业是:运用5个以上的设计模式创建一个系统。(这里我问了一下老师,老师说反正就是要5个以上联系在一个project里的就行了嘿嘿嘿。) 作为一个平时不认真学习的“学生...
  • 软件设计大作业

    2014-12-10 10:49:06
    1、服装管理系统,主要分为两个功能模块:服装价格计算模块和商品信息管理块。...采用了简单工厂模式、单例模式、策略模式、装饰模式和模板方法模式。 2、用java编写。有源代码、文档及视频 3、我的期末作业
  • 单例模式理论知识: 单例模式官方定义:确保一个类只有一个实例,并提供全局访问点来访问这个唯一的实例。(全局访问点:实际就是全局变量,主要解决对象随时都可以被访问,但是不能防止创建多个对象这个问题) ...
  • 在某绘图软件中提供了多种大小不同的画笔(Pen),并且可以给画笔指定不同的颜色,某设计人员针对画笔的结构设计了如图2-11所示的初始类图。 通过仔细分析,设计人员发现该类图存在非常严重的问题,如果增加一种新...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,114
精华内容 445
关键字:

设计模式大作业