没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
面向对象设计原则:
1. 单一职责原则: 不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责
一项职责。
2. 开闭原则(重构)(抽象): 一个软件实体如类、模块和函数应该对扩展开放,对
修改关闭。
3. 里氏代换原则:
定义 1:如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1
定义的所有程序 P 在所有的对象 o1 都代换成 o2 时,程序 P 的行为没有发生变化,
那么类型 T2 是类型 T1 的子类型。
定义 2:所有引用基类的地方必须能透明地使用其子类的对象。
4. 依赖倒转原则: 高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应
该依赖细节;细节应该依赖抽象。
5. 迪米特法则(重构、转发、调用): 迪米特法则(Law of Demeter)又叫作最少知
识原则(Least Knowledge Principle 简写 LKP),就是说一个对象应当对其他对象
有尽可能少的了解,不和陌生人说话。
6. 接口隔离原则: 客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该
建立在最小的接口上。
7. 合成、聚合、复用原则:
1、继承复用
继承复用通过扩展一个已有对象的实现来得到新的功能,基类明显地捕获共同
的属性和方法,而子类通过增加新的属性和方法来扩展超类的实现。继承是类型的
复用。
继承复用的优点:
新的实现较为容易,因为超类的大部分功能可通过继承关系自动进入子类;
修改或扩展继承而来的实现较为容易。
继承复用的缺点:
继承复用破坏封装,因为继承将超类的实现细节暴露给子类。“白箱”复用;
如果超类的实现发生改变,那么子类的实现也不得不发生改变。
从超类继承而来的实现是静态的,不可能再运行时间内发生改变,因此没有
足够的灵活性。
2、合成/聚合复用
由于合成/聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分,
因此新的对象可以调用已有对象的功能,
其优点在于:
新对象存取成分对象的唯一方法是通过成分对象的接口;
成分对象的内部细节对新对象不可见。 “黑箱”复用;
该复用支持封装。
该复用所需的依赖较少。
每一个新的类可将焦点集中在一个任务上。
该复用可在运行时间内动态进行,新对象可动态引用于成分对象类型相同的
对象。
缺点:
通过这种复用建造的系统会有较多的对象需要管理。
为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地
对接口进行定义。
一、 设计模式分类:
创建型模式:
工厂模式
简单工厂
工厂方法
抽象工厂(等级结构和产品族)
单例模式
原型模式(不要求代码)Cloneable(继承)继承 Clone()方法
序列化(不要求代码)Serializable 锁
结构化设计模式
组合模式
适配器模式
装饰者模式
桥接模式
代理模式(不写代码)
行为性设计模式
迭代器模式
访问者模式(重构代码)
状态模式 定义(电灯开关)
观察者模式 定义
简单工厂
Fruit 接口
public interface Fruit {
public void plant();
public void grow();
public void havrest();}
Apple 类
public class Apple implements Fruit {
public void plant() { System.out.println("苹果正在发芽"); }
public void grow() { System.out.println("苹果正在生长"); }
public void havrest() { System.out.println("苹果已经成熟"); }}
Grape 类
public class Grape implements Fruit {
public void plant() { System.out.println("葡萄正在发芽"); }
public void grow() { System.out.println("葡萄正在生长"); }
public void havrest() { System.out.println("葡萄成熟"); }}
FruitFactory 方法
public class FruitFactory {
public static Fruit getFruit(String str){
Fruit fruit=null;
if(str.equals("apple")){ return new Apple();
}else if( str.equals("grape")){
return new Grape(); }else
{ System.out.print("没有你要的水果。"); }
return fruit; }}
主函数
public class Cliet {
public static void main(String[] args) {
Fruit f=null;
f=FruitFactory.getFruit("apple");
f.grow(); f.plant(); f.havrest(); }}
工厂方法
Fruit 接口
public interface Fruit {
public void plant();
public void grow();
public void havrest();}
Apple 类
public class Apple implements Fruit {
public void plant() { System.out.println("苹果正在发芽"); }
public void grow() { System.out.println("苹果正在生长"); }
public void havrest() { System.out.println("苹果已经成熟"); }}
Grape 类
public class Grape implements Fruit {
public void plant() { System.out.println("葡萄正在发芽"); }
public void grow() { System.out.println("葡萄正在生长"); }
public void havrest() { System.out.println("葡萄成熟"); }}
FruitFactory 接口
public interface FruitFactory { public Fruit getFruit();}
AppleFactory 类
public class AppleFactory implements FruitFactory{
public Fruit getFruit() { return new Apple(); }}
GrapeFactory 类
public class GrapeFactory implements FruitFactory {
public Fruit getFruit() { return new Grape(); }}
主函数
public class Cliet {
public static void main(String[] args) {
FruitFactory fruitfactory = null;
fruitfactory=new AppleFactory();
fruitfactory.getFruit().plant();
fruitfactory.getFruit().grow();
fruitfactory.getFruit().havrest(); }}
抽象工厂
IBike 接口
public interface IBicylce {
public void ignition();
public void startup();}
ISuv 接口
public interface ISUV {
void ignition();
void startup();}
SuperBike 类
public class SuperBicycle implements IBicylce {
public void ignition() {
System.out.println("SuperBicycle is on ignition"); }
public void startup() {
System.out.println("SuperBicycle is startup"); }}
SuperSuv 类
public class SuperSUV implements ISUV {
public void ignition() {
System.out.println("SuperSUV is on ignition"); }
public void startup() {
System.out.println("SuperSUV is startup"); }}
SlowBike 类
public class SlowBicycle implements IBicylce {
public void ignition() {
System.out.println("SlowBicycle is on ignition"); }
public void startup() {
System.out.println("SlowBicycle is startup"); }}
SlowSuv 类
public class SlowSUV implements ISUV {
public void ignition() {
System.out.println("SlowSUV is on ignition"); }
public void startup() {
System.out.println("SlowSUV is startup"); }}
ProductFactory 抽象类
public abstract class ProductFactory {
public abstract ISUV getIsuv();
public abstract IBicylce getIBicylce();
public static ProductFactory getProductFactory(String type){
ProductFactory pf=null;
if(type.equals("super")){ pf=new SuperFactory();
}else if ( type.equals("slow")) {
pf=new SlowFactory(); }
return pf;}}
Super 类
public class SuperFactory extends ProductFactory{
public ISUV getIsuv() {
return new SuperSUV();
剩余21页未读,继续阅读
资源评论
Luke@
- 粉丝: 225
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功