文档章节

java特训第三课

旺仔没馒头
 旺仔没馒头
发布于 2017/09/03 16:40
字数 1196
阅读 10
收藏 0

精选30+云产品,助力企业轻松上云!>>>

软件设计原则

目标:构建松散耦合的系统
1.开闭原则
  一个软件,应该对扩展开放,对修改关闭应。当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。
2.里氏代换原则
  子类可以扩展父类的功能,但不能改变父类原有的功能。也就是说子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。子类中可以增加自己特有的方法。
3.依赖倒置原则
  抽象不应当依赖于细节,细节应当依赖于抽象。也就是说应当依赖于接口,而不是依赖于实现。
4.接口隔离原则
  一个类对另外一个类的依赖是建立在最小的接口上,接口中尽量少包含方法。假如接口中方法过多,应将其拆散为多个接口。
5.合成/聚集复用原则
  使用合成/聚集来代替继承
6.迪米特法则
  不要和陌生人讲话,也就是不可以在一个类中暴露与它自己不相干的类。
7.单一职责原则
  就一个类而言,应该仅有一个引起它变化的原因,如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.应该把多于的指责分离出去,分别再创建一些类来完成每一个职责。

常用设计模式

1.单例模式
  单例模式是设计模式中使用最为普遍的模式之一。它是一种对象创建模式,用于产生一个对象的具体实例,它可以确保系统中一个类只产生一个实例。在Java语言中,这样的行为能带来两大好处:
(1)对于频繁使用的对象,可以省略new操作花费的时间,这对于那些重量级对象而言,是非常可观的一笔系统开销。
(2)由于new操作的次数减少,因而对系统内存的使用频率也会降低,这将减轻GC压力,缩短GC停顿时间。

  public class Singleton {
  private Singleton(){
    System.out.println("Singleton is create");
  }
  private static Singleton instance = new Singleton();
  public static Singleton getInstance() {
    return instance;
  }
  }

2.代理模式
  为其他对象提供一种代理,并以控制对这个对象的访问。(Provide asurrogate or placeholder foranother object tocontrol access to it. )而对一个对象进行访问控制的一个原因是为了只有在我们确实需要这个对象时才对它进行创建和初始化。

public interface IDBQuery {
	String request();
}

public class DBQuery implements IDBQuery{
	public DBQuery(){
		try {
			Thread.sleep(1000); //可能包含数据库连接等耗时操作
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	@Override
	public String request() {
		return "request string";
	}
}


3.工厂模式
  工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

public class Factory {  
    public BMW createBMW(int type) {  
        switch (type) {  

        case 320:  
            return new BMW320();  

        case 523:  
            return new BMW523();  

        default:  
            break;  
        }  
        return null;  
    }  
}

4.装饰者模式
  装饰者模式可以给已经存在的对象动态的添加能力


public abstract class Girl {
   String description = "no particular";
   public String getDescription(){
       return description;
   }
}


public abstract class GirlDecorator extends Girl {
   public abstract String getDescription();
}


public class Science extends GirlDecorator {
 private Girl girl;
 public Science(Girl girl){
     this.girl = girl;
 }
 @Override
 public String getDescription() {
     return this.girl.getDescription() + "+Like Science";
 }
 public void caltulateStuff() {
     System.out.println("scientific calculation!");
 }
}

public class Art extends GirlDecorator {
  private Girl girl;
  public Art(Girl girl){
      this.girl = girl;
  }
  @Override
  public String getDescription() {
      return this.girl.getDescription() + "+Like Art";
  }
  public void draw() {
      System.out.println("draw pictures!");
  }
}
public class Main {
  public static void main(String[] args) {
      //普通美国女孩
      Girl g1 = new AmericanGirl();
      System.out.println(g1.getDescription());

      //喜欢科学的
      Science g2 = new Science(g1);
      System.out.println(g2.getDescription());

      //喜欢科学和艺术的
      Art g3 = new Art(g2);
      System.out.println(g3.getDescription());
  }
}

5.模板方法
  模板方法模式是所有模式中最为常见的几个模式之一,是基于继承的代码复用的基本技术
  好莱坞原则(don't call us, we'll call you)

public abstract class  Account {
  /**
   * 模板方法,计算利息数额
   * @return    返回利息数额
   */
  public final double calculateInterest(){
      double interestRate = doCalculateInterestRate();
      String accountType = doCalculateAccountType();
      double amount = calculateAmount(accountType);
      return amount * interestRate;
  }

  /**
   * 基本方法留给子类实现
   */
  protected abstract String doCalculateAccountType();
  /**
   * 基本方法留给子类实现
   */
  protected abstract double doCalculateInterestRate();
  /**
   * 基本方法,已经实现
   */
  private double calculateAmount(String accountType){
      /**
       * 省略相关的业务逻辑
       */
      return 7243.00;
  }
}
public class MoneyMarketAccount extends Account {
    @Override
    protected String doCalculateAccountType() {

        return "Money Market";
    }
    @Override
    protected double doCalculateInterestRate() {
        return 0.045;
    }
}

public class CDAccount extends Account {
    @Override
    protected String doCalculateAccountType() {
        return "Certificate of Deposite";
    }
    @Override
    protected double doCalculateInterestRate() {
        return 0.06;
    }
}

public class Client {

    public static void main(String[] args) {
        Account account = new MoneyMarketAccount();
        System.out.println(“活期账号的利息数额为:" + account.calculateInterest());
        account = new CDAccount();
        System.out.println("定期账号的利息数额为:" + account.calculateInterest());
    }

}
下一篇: java特训第二课
旺仔没馒头

旺仔没馒头

粉丝 3
博文 51
码字总数 54528
作品 0
济南
程序员
私信 提问
加载中
请先登录后再评论。
21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试视频下载

软件测试系列之Java Selenium3自动化测试项目实战视频教程网盘下载 21套高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,...

IT编程168
2018/12/22
4
0
21套自动化测试,接口测试,UFT高级测试,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试项目实战视频课程下载

21套自动化测试,接口测试,UFT高级测试,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试项目实战视频课程下载 21套高级软件测试,性能测试,功能测试,自动化测试,接口测试...

IT编程168
2018/12/22
10
0
21套自动化测试,接口测试,UFT高级测试,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试项目实战视频课程下载

21套自动化测试,接口测试,UFT高级测试,Android测试,Selenium3自动化测试,Python3 测试,Java接口测试项目实战视频课程下载 21套高级软件测试,性能测试,功能测试,自动化测试,接口测试...

IT编程168
2018/12/22
17
0
Java自动化测试Java接口自动化测试实战视频教程最全面的

Java自动化测试Java接口自动化测试实战视频教程最全面的高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒...

osc_nbqoh20k
2019/11/30
7
0
Selenium自动化测试视频下载软件测试之JAVA语言版

Selenium自动化测试视频下载软件测试之JAVA语言版高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,...

osc_bc7dotjc
2019/11/30
2
0

没有更多内容

加载失败,请刷新页面

加载更多

使用getApplication()作为上下文的对话框抛出“无法添加窗口-令牌null不适用于应用程序”

问题: My Activity is trying to create an AlertDialog which requires a Context as a parameter. 我的活动试图创建一个AlertContext,它需要一个Context作为参数。 This works as expect......

法国红酒甜
36分钟前
0
0
java常用开发支持类库

UUID类 UUID是一个生成无重复字符串的程序类(JDK1.5之后出现),这个程序类的主要功能是根据时间戳实现一个自动的无重复的字符串定义(无重复指的是出现重复的概率极低)。 一般在获取UUID时...

哼着我的小调调
46分钟前
15
0
亚马逊测评买家号多开_可以解决这个问题嘛?_微信公众号: VMlogin中文版

对于很多亚马逊卖家来说,做亚马逊测评是并不可少的,都在为了自己的店铺能够获得更多的销售,着重培养自己产品的各项属性,以求获得一个更好的权重排名从而获得更多的曝光,但是在旺季期间亚...

竹节猫-ASOer
53分钟前
10
0
Java基础系列——数组之java.util.Arrays使用以及可能出现的异常(12)

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。常用方法如下所示: boolean equals(int[] a,int[] b) 判断两个数组是否相等。 String toStrin...

卢佳鹏
今天
19
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部