下载 23种设计模式源码 :http://download.csdn.net/download/knight_black_bob/8936043
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
创建型模式,共五种:
工厂方法模式 抽象工厂模式 单例模式 建造者模式 原型模式
结构型模式,共七种:
适配器模式 装饰器模式 代理模式 外观模式 桥接模式 组合模式 享元模式
行为型模式,共十一种:
策略模式 模板方法模式 观察者模式 迭代子模式 责任链模式 命令模式
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
package 设计模式.外观模式; public class Product { private String name; private double price; private int count; public Product(){} public Product(String name){ this.name = name; } public Product(String name, double price, int count) { this.name = name; this.price = price; this.count = count; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } @Override public boolean equals(Object obj) { if (obj != null) if (obj instanceof Product) return this.name == ((Product) obj).getName(); return false; } @Override public String toString() { StringBuffer sb =new StringBuffer(); sb.append(getClass().getName().substring(getClass().getName().lastIndexOf(".")+1,getClass().getName().length())); sb.append("["); sb.append("\"name\":\""+name+"\","); sb.append("\"count\":"+count+","); sb.append("\"price\":"+price); sb.append("]"); return sb.toString(); } }
package 设计模式.外观模式; import java.util.ArrayList; import java.util.List; public class Shop { static List<Product> plist = new ArrayList<Product>(); static { Product apple = new Product("apple",2.5,200); Product pear = new Product("pear",1.0,200); plist.add(apple); plist.add(pear); } public double getProPrice(String name){ Product pro =null; for (Product p : plist) { if (p.equals(new Product(name)) == true) { pro =p; break; } } if (pro !=null) return pro.getPrice(); else return 0.0; } public boolean rebuy(String name ,int count ){ boolean flag =false; Product pro =null; for (Product p : plist) { flag = flag | p.equals(new Product(name)); if (flag == true) { pro =p; break; } } if (flag == true && pro !=null) if (pro.getCount() >= count) flag = true; else flag = false; else flag =false; return flag; } public boolean buy(String name ,int count ){ boolean flag =false; Product pro =null; for (Product p : plist) { flag = flag | p.equals(new Product(name)); if (flag == true) { pro =p; break; } } plist.remove(pro); pro.setCount(pro.getCount()-count); plist.add(pro); return flag; } public List<Product> getList(){ return plist; } }
package 设计模式.外观模式; public class Wallet { static double money = 10000.00; public boolean check(double price){ boolean flag =false; if (money > price ){ flag = true; }else flag =false; return flag; } public boolean pay(double price){ boolean flag =false; if (money > price ){ money -= price; flag = true; }else flag =false; return flag; } public double balance(){ return money; } }
package 设计模式.外观模式; import java.util.ArrayList; import java.util.List; public class Order { static List<Product> plist = new ArrayList<Product>(); public boolean addOrder(Product p){ plist.add(p); return true; } public boolean addOrder(String name, double price, int count){ Product p = new Product ( name ,price ,count) ; return this.addOrder(p); } public List<Product> getOrderList(){ return plist; } }
package 设计模式.外观模式; import java.util.List; public class Pay { Shop shop = new Shop(); Wallet mWallet = new Wallet(); Order order= new Order(); public boolean doPay(String name ,int count){ boolean flag = false; flag = flag | shop.rebuy(name, count); if (flag == false) return flag; flag = flag & mWallet.check(shop.getProPrice(name) * count); if (flag == false) return flag; flag = flag &shop.buy(name, count); if (flag == false) return flag; flag = flag &mWallet.pay(shop.getProPrice(name) * count); if (flag == false) return flag; flag = flag & order.addOrder(name, shop.getProPrice(name) * count, count); return flag; } public double balance(){ return mWallet.balance(); } public String myOrder(){ StringBuffer sb = new StringBuffer(); sb.append("{"); List<Product> list = order.getOrderList(); for (int i = 0; i < list.size(); i++) { Product p = list.get(i); sb.append("[\"name\":\""+p.getName()+"\""); sb.append("\"price\":\""+p.getPrice()+"\""); sb.append("\"count\":\""+p.getCount()+"\"],"); if (i == list.size()-1) sb = sb.replace(sb.length()-1, sb.length(), ""); } sb.append("}"); return sb.toString(); } public String productList(){ StringBuffer sb = new StringBuffer(); sb.append("{"); List<Product> list = shop.getList(); for (int i = 0; i < list.size(); i++) { Product p = list.get(i); sb.append("[\"name\":\""+p.getName()+"\""); sb.append("\"price\":\""+p.getPrice()+"\""); sb.append("\"count\":\""+p.getCount()+"\"],"); if (i == list.size()-1) sb = sb.replace(sb.length()-1, sb.length(), ""); } sb.append("}"); return sb.toString(); } }
package 设计模式.外观模式; public class FacadeTest { //简化外部客户程序和系统间的交互接口 //为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。[GOF 《设计模式》] public static void main(String[] args) { Pay pay = new Pay(); System.out.println("余额:" +pay.balance()); System.out.println("商品信息:" +pay.productList()); System.out.println("我的购物车:" +pay.myOrder()); System.out.println("支付是否成功:" + pay.doPay("apple", 2)); System.out.println("支付是否成功:" + pay.doPay("apple", 200000)); System.out.println("支付是否成功:" + pay.doPay("banana", 2)); System.out.println("余额:" +pay.balance()); System.out.println("商品信息:" +pay.productList()); System.out.println("我的购物车:" +pay.myOrder()); } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
大话设计模式之外观模式 经典代码 C#类
### 设计模式之外观模式详解 #### 一、引言 在软件开发过程中,随着系统的不断扩展和功能的增加,可能会出现系统结构复杂、接口众多的情况。为了简化系统的使用方式,提高系统的可维护性和可扩展性,外观模式...
**外观模式(Facade Pattern)**是一种结构型设计模式,它为复杂的系统或子系统提供一个简单的接口,使得客户端可以不关心内部的复杂性,只通过这个接口与子系统进行交互。这种模式降低了系统的复杂度,提高了代码的...
**外观模式(Facade Pattern)**是软件设计模式中的一种结构型模式,它的主要目的是为了解耦复杂的系统,提供一个统一的接口,使得客户端可以更容易地使用这个系统。在这个模式中,外观类作为客户端与子系统之间的...
**外观模式(Facade Pattern)**是一种结构型设计模式,它主要解决的是复杂系统或子系统对外暴露一个简单统一的接口,使得客户端无需关心内部复杂的交互细节。这种模式在实际开发中广泛应用,尤其在大型项目中,它能...
外观模式(Facade Pattern)是一种结构型设计模式,用于为复杂子系统提供一个简单的接口。它通过封装系统内部的复杂性,提供一个统一的接口,使得客户端能够更加方便地使用子系统的功能。这种模式通常用于简化代码、...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,主要目的是为了解决复杂的系统接口问题,提供一个简单的统一入口,使得客户端可以更方便地使用系统。在Java中,外观模式通常用来隐藏系统的复杂性,对外只...
**外观(Facade)模式**是软件工程中一种常用的设计模式,属于结构型模式,它为复杂的子系统提供了一个统一的接口,使得客户端可以更简单地使用这些子系统。在Java编程中,外观模式的应用十分广泛,它能有效地降低...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,其主要目的是为了解耦系统,降低客户端与复杂子系统的交互复杂性。在大型系统中,通常由多个子系统组成,每个子系统都包含多个类,它们共同提供所需功能。...
外观模式(Facade Pattern)是设计模式中的一种结构型模式,它的主要目的是提供一个统一的接口,以便客户端可以更简单地与复杂的子系统交互。在Java中,这种模式通过创建一个新接口来封装多个子系统的操作,减少...
### Java设计模式之外观模式详解 #### 模式概述与定义 外观模式(Facade Pattern),又称门面模式,属于对象结构型模式的一种。其主要作用是为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易被使用...
在软件设计领域,设计模式是一种经过时间和实践验证的解决方案,用于解决常见的...这个"设计模式之适配器模式与外观模式demo"资源为学习和实践这两种模式提供了宝贵的实例,对于提升编程技能和设计思维具有积极意义。
本文实例讲述了PHP设计模式之外观模式(Facade)入门与应用。分享给大家供大家参考,具体如下: 这个外观模式,就是通过在必需的逻辑和方法的集合前创建简单的外观接口,并且还会隐藏了调用对象的复杂性,它和建造者...
代理模式与外观模式有着相似之处,即它们都是对象的包装器,但是它们的目的和实现方式不同。外观模式主要是简化接口,而代理模式则主要是控制对象的访问。 代理模式与外观模式都属于结构型设计模式,它们的目标都是...
**外观模式(Facade Pattern)**是软件工程中一种常用的设计模式,它为复杂的子系统提供了一个简单的接口,使得客户端代码可以更容易地与这些子系统交互。在C#中,外观模式同样被广泛应用,以降低系统的复杂性,提高...
"设计模式之美——教你写出高质量代码"这个主题旨在帮助开发者更好地理解和应用设计模式,从而提升代码的质量和可维护性。设计模式不仅对面试有所帮助,也是职场发展中的必备技能,无论你使用哪种开发语言。 设计...
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于与一个复杂的子系统进行交互。这个接口简化了子系统的使用,使得客户端无需了解子系统内部的复杂性。在本示例中,电脑整机可以看作是...