前几天有事耽误了几天,后面慢慢补回来。中年人杂事多,精力也不够。尽量找找年轻时候的兴趣劲吧。 前面捣鼓了看代码的工具,有个想法可以边做小小的工具,边手写一些设计模式的代码实现,看看就在这个小工具上硬套实现,就是不考虑是否是过度的那种,尽量用两种语言实现,主要目的是熟悉学习吧。
小工具的实现可能最终不是给普通人用的(主要是python实现,dart是顺带打酱油的),不过给前端熟悉的程序猿 从网页生成 pdf mobi应该是没问题的,只要您懂里面有几个参数哪里来的。主要是把网站里的 docs的那种 页面生成 pdf , mobi。例如 网站flutter.cn/docs
生成的mobi文档效果如下图
重点记录下学习的代码片段和dp的思想吧
简单工厂模式
根据参数输入 文件格式不同 生成不同的文件,部分接口使用的列子代码
python实现
import abc
from abc import *
class BookInfo(object):
url = ""
navItemContent = ""
content = ""
def __init__(self, url, navItem, content):
self.url = url
self.navItemContent = navItem
self.content = content
class Book(metaclass=abc.ABCMeta):
bookInfo = ""
fileExtension = ""
name = ""
def __init__(self, bookInfo, fmt):
self.bookInfo = bookInfo
self.fileExtension = "." + fmt
self.name = self.calcBookName(fmt)
self.prepare()
@abstractmethod
def makeBook(self):
'''
makeBook
:制作电子书:
'''
def calcBookName(self, fmt):
'''
从参数里面计算出书的名字
:return:
'''
print(self.bookInfo.url)
filenameTempString = self.bookInfo.url.split("//")[1]
filenameTempString = filenameTempString.replace(".", "_")
filenameTempString = filenameTempString.replace("-", "_")
filenameTempString = filenameTempString.replace("/", "_")
file_name = filenameTempString + self.fileExtension
return file_name
def prepare(self):
"""
准备工作
:return:
"""
# print(__doc__)
print(self.name)
class PdfBook(Book):
"""
pdf book
"""
def makeBook(self):
"""
make pdf book func
:return:
"""
print(PdfBook.__doc__)
class MobiBook(Book):
"""
Mobi book
"""
def makeBook(self):
"""
make mobi book func
:return:
"""
print(MobiBook.__doc__)
class HtmlBook(Book):
"""html book """
def makeBook(self):
"""
make html book func
:return:
"""
print(HtmlBook.__doc__)
class SimpleFactory(object):
"""
简单工厂
"""
@staticmethod
def createBook(bookInfo, fmt):
"""
简单工厂
:param bookInfo:
:param fmt:
:return:
"""
if 'pdf' in fmt:
print("create pdf factory")
return PdfBook(bookInfo, fmt)
elif "mobi" in fmt:
print("create mobi file")
return MobiBook(bookInfo, fmt)
elif 'html' in fmt:
print("create html file")
return HtmlBook(bookInfo, fmt)
else:
print("暂时支持pdf 和mobi和html")
print("test now")
bookInfo = BookInfo("https://flutter.cn/docs", "nav_item", "content")
bookCreate = SimpleFactory.createBook(bookInfo, 'pdf')
bookCreate.makeBook()
运行结果
dart实现
class BookInfo {
String url = "";
String content = "";
String navItem = "";
BookInfo(this.url, this.navItem, this.content);
}
class Book {
BookInfo bookInfo;
String fmt;
Book(this.bookInfo, this.fmt) {
print("init bookInfo");
}
makeBook() {
print("make book" + fmt);
}
}
class HtmlBook extends Book {
HtmlBook(BookInfo bookInfo, String fmt) : super(bookInfo, fmt);
@override
makeBook() {
print("html file override xxxxxxxxxxxxxxxxxxxx");
return super.makeBook();
}
}
class PdfBook extends Book {
PdfBook(BookInfo bookInfo, String fmt) : super(bookInfo, fmt);
@override
makeBook() {
print("pdf file");
return super.makeBook();
}
}
class MobiBook extends Book {
MobiBook(BookInfo bookInfo, String fmt) : super(bookInfo, fmt);
@override
makeBook() {
print("mobi book");
return super.makeBook();
}
}
class SimpleFactory extends Object {
static createBook(BookInfo bookInfo, String fmt) {
if (fmt.endsWith("pdf")) {
print(" pdf xxx");
return PdfBook(bookInfo, fmt);
} else if (fmt.endsWith("html")) {
print(" html xxx");
return HtmlBook(bookInfo, fmt);
} else if (fmt.endsWith("mobi")) {
print(" mobi xxx");
return MobiBook(bookInfo, fmt);
} else {
print("不支持其他格式");
}
}
}
void main(List<String> args) {
BookInfo bi = BookInfo("https://flutter.cn/docs", "nav_item", "content");
Book thisBook = SimpleFactory.createBook(bi, "html");
thisBook.makeBook();
}