首页 技术 正文
技术 2022年11月21日
0 收藏 367 点赞 2,600 浏览 2651 个字

设计模式开卷考试给的例子代码都是一个类一个java,实在太恶心了,所以写了一个python脚本.

import os
fileansdir=r'C:\Users\tonyson_in_the_rain\Desktop\笔记\JAVA代码\设计模式'

主要用的os库

API总结:

  • files=listdir(path) 显示当前目录的所有文件名和目录名
  • endswith() 选择扩展名
  • windows的路径只需要前面加一个r即可在python程序中使用
  • 把合并的文件在当前目录保存,也可以改成某一目录保存,但是要注意名字

combine函数是一个子过程,可以把dirpath目录下的所有文件合并为一个文件

def combine(dirPath,filename):
files=os.listdir(dirPath)
res=""
i = 0
for file in files:
if file.endswith(".java"):
i+=1
title=file with open(dirPath+'\\'+file,"r")as file:
content=file.read()
file.close()
res+='\n\n' res+='#### '+title
res+='\n\n'
res+='```\n'
res+=content
res+='\n```\n' with open(dirPath+'\\'+filename+'.txt','w')as outFile:
outFile.write(res)
outFile.close()

然后遍历各个文件夹分别跑一遍子过程即可

import osdef EnumPathFiles(path, callback):
ii=0
if not os.path.isdir(path):
print('Error:"',path,'" is not a directory or does not exist.')
return
list_dirs = os.walk(path) for root, dirs, files in list_dirs: for d in dirs:
EnumPathFiles(os.path.join(root, d), callback)
dirc=path+'\\'+d
print(dirc)
if(dirc.endswith('memento')):
continue
ii+=1
name=d combine(dirc,name)def callback1(path, filename):
print(path+'\\'+filename)EnumPathFiles(r'C:\Users\tonyson_in_the_rain\Desktop\大三上学习\设计模式\设计模式2018(张欣佳)', callback1)

这里会报一个错误,因为子目录对不上号的原因,不过在这之前有用的目录我们已经跑过了,所以不用管了.

合成的md文件如下:不过是按照类名字典序排的,需要手动调整顺序

Apple.java

public class Apple implements Product
{
public void accept(Visitor visitor)
{
visitor.visit(this);
}
}

Book.java

public class Book implements Product
{
public void accept(Visitor visitor)
{
visitor.visit(this);
}
}

BuyBasket.java

import java.util.*;public class BuyBasket
{
private ArrayList list=new ArrayList();public void accept(Visitor visitor)
{
Iterator i=list.iterator();while(i.hasNext())
{
((Product)i.next()).accept(visitor);
}
}public void addProduct(Product product)
{
list.add(product);
}public void removeProduct(Product product)
{
list.remove(product);
}
}

Client.java

public class Client
{
public static void main(String a[])
{
Product b1=new Book();
Product b2=new Book();
Product a1=new Apple();
Visitor visitor; BuyBasket basket=new BuyBasket();
basket.addProduct(b1);
basket.addProduct(b2);
basket.addProduct(a1); visitor=(Visitor)XMLUtil.getBean(); visitor.setName("张三"); basket.accept(visitor);
}
}

Customer.java

public class Customer extends Visitor
{
public void visit(Apple apple)
{
System.out.println("顾客" + name + "选苹果。");
}public void visit(Book book)
{
System.out.println("顾客" + name + "买书。");
}
}

Product.java

public interface Product
{
void accept(Visitor visitor);
}

Saler.java

public class Saler extends Visitor
{
public void visit(Apple apple)
{
System.out.println("收银员" + name + "给苹果过秤,然后计算其价格。");
}public void visit(Book book)
{
System.out.println("收银员" + name + "直接计算书的价格。");
}
}

Visitor.java

public abstract class Visitor
{
protected String name;public void setName(String name)
{
this.name=name;
}public abstract void visit(Apple apple);public abstract void visit(Book book);
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,905
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,430
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,247
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,058
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,690
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,727